#pragma once

#include<memory>

#include "storm/environment/Environment.h"
#include "storm/environment/SubEnvironment.h"

namespace storm {
    
    // Forward declare subenvironments
//    class EigenSolverEnvironment;
//    class GmmxxSolverEnvironment;
    class MinMaxSolverEnvironment;
 //   class NativeSolverEnvironment;
    
    class SolverEnvironment {
    public:
        
        SolverEnvironment();
        ~SolverEnvironment();
        
//        EigenSolverEnvironment& eigen();
//        EigenSolverEnvironment const& eigen() const;
//        GmmxxSolverEnvironment& gmmxx();
//        GmmxxSolverEnvironment const& gmmxx() const;
        MinMaxSolverEnvironment& minMax();
        MinMaxSolverEnvironment const& minMax() const;
//        NativeSolverEnvironment& native();
//        NativeSolverEnvironment const& native() const;

        bool isForceSoundness() const;
        void setForceSoundness(bool value);
    
    private:
//        std::unique_ptr<EigenSolverEnvironment> eigenSolverEnvironment;
//        std::unique_ptr<GmmxxSolverEnvironment> gmmxxSolverEnvironment;
        SubEnvironment<MinMaxSolverEnvironment> minMaxSolverEnvironment;
 //       std::unique_ptr<NativeSolverEnvironment> nativeSolverEnvironment;
      
        bool forceSoundness;
    };
}