#pragma once
#include <memory>
#include <map>

#include "ApiConnector.h"
#include "Model.h"
#include "SimulationInputs.h"
#include "SimulationOutputs.h"

class PersistentSimulation;

namespace CppModelBase
{
    class Simulation : public Model
    {
    private:
        void Prepare();
        void Conclude();
    protected:
        unsigned long long stepSize_ms = 0;
        unsigned long long time_ms = 0;

        SimulationInputs inputs;
        SimulationOutputs outputs;
        nlohmann::json parameters;

        int simulationResult = true;

        bool runOffline = false;

    public:
        std::string name;

        Simulation();
        ~Simulation();

        unsigned long long GetTotalTime();
        int GetSimulationResult();

        nlohmann::json GetResults();

        void Simulate();
    };
}
