#pragma once

#include <string>
#include <vector>

#include "DllDefines.h"

class IODLLCLASS CHardwareConfiguration
{
public:
    // !!! MUST declare destructor. Else factory design will cause memory leak
    virtual ~CHardwareConfiguration() {}

    virtual bool        GetChannelConfig(int nCardType, int nCardNo, int nNoOfChannel, std::vector<int>& vecChannelArray, int nWhatCard) = 0;
    virtual int         GetSharing(int nCardType, int nCardNo, int nWhatCard)                                              = 0;
    virtual int         GetNoOfDifferentCardType(int nWhatCard)                                                            = 0;
    virtual std::string GetCardName(int nCardTypeNo, int nWhatCard)                                                        = 0;

    // get the no of card of different card category
    virtual int GetNoOfCard(int nCardTypeNo, int nWhatCard) = 0;

    // Distributed Motion
    virtual int         GetNoOfModels(int nCardTypeNo, int nWhatCard)              = 0;
    virtual std::string GetModelName(int nCardTypeNo, int nModelNo, int nWhatCard) = 0;

    virtual int GetModelNoOfCards(int nCardTypeNo, int nModelNo, int nWhatCard)            = 0;
    virtual int GetAddress(int nCardTypeNo, int nModelNo, int nCardNo, int nWhatCard)      = 0;
    virtual int GetSpeed(int nCardTypeNo, int nModelNo, int nCardNo, int nWhatCard)        = 0;
    virtual int GetHSLSpeed(int nCardTypeNo, int nModelNo, int nCardNo, int nWhatCard)     = 0;
    virtual int GetHSLHubNumber(int nCardTypeNo, int nModelNo, int nCardNo, int nWhatCard) = 0;

    // custom
    virtual int GetGalilTriggerPulseWidth() = 0;
    virtual bool GetGalilNewHomeBySensor() = 0;
};