using GeneralData;
using Mini8CommunicatorData;

namespace Mini8Communicator;

public interface IMini8Communicator
{
    bool Initialize(IMini8Provider provider, object mini8Config, object address);
    bool Open();
    bool Pause();
    bool StartDataCollector();
    bool SendMini8Data(byte channelIndex, Mini8Input output);
    bool EnableChannel(byte channelIndex, Inhibit inhibit);
    bool SelectPID(byte channelIndex, ActiveTuneSet activeTuneSet);
    bool GetRealtimeDataFromDevice(out Dictionary<byte, Mini8Output>? data);
    bool GetRealtimeLimit(out Dictionary<byte, Mini8Limit>? data);
    bool EnableChannelAutoTune(byte channelIndex, bool isEnable);
    bool Close();
}

public interface IMini8ConnectNotify
{
    void OnConnected(string IP, int port);
    void OnDisconnected(string IP, int port);
}

public interface IMini8Provider : IMini8ConnectNotify
{
    //IDictionary<byte, ChannelAddress> GetUpdateList<T_Address>() where T_Address : struct;
    void ChannelInfoNotify(byte channel, Mini8Output mini8Input);
}