#ifndef MDD_IINPUT_H
#define MDD_IINPUT_H

//#include "json.hpp"
#include <memory>
#include "IOutput.h"
#include "IUnique.h"
#include "IState.h"
#include "IConnector.h"
#include "IOptimizable.h"
#include <vector>

namespace mdd{
    struct limits {
        std::vector<double> min;
        std::vector<double> max;
        std::vector<double> step;
        std::string rule;
        std::vector<std::vector<double>> elements;
    };

    class IInput 
        : public IUnique
        , public IState
        , public IConnector<IOutput>
        , public IOptimizable
    {
    public:
        virtual const limits& getLimits() = 0;
        virtual limits& setLimits() = 0;
        virtual std::shared_ptr<IOutput> getConnection() = 0;
        virtual ~IInput() = default;
    };
}
#endif
