#ifndef MDD_IINPUT_H
#define MDD_IINPUT_H

//#include "json.hpp"
#include <memory>
#include "IInteractive.h"
#include "IOutput.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 IInteractive<IOutput>  
    {
    public:
        typedef std::shared_ptr<IInput> Ptr;
        virtual const std::shared_ptr<limits> getLimits() = 0;
        virtual std::shared_ptr<limits>& setLimits() = 0;
        virtual std::shared_ptr<IOutput> getConnection() = 0;
        virtual ~IInput() = default;

        int removeConnection(std::shared_ptr<IOutput> output = nullptr) = 0;
    };
}
#endif
