//---------------------------------------------------------------------------
#ifndef ValidatorH
#define ValidatorH
//---------------------------------------------------------------------------
#include "../ComPort.h"
#include "ValidatorThread.h"
//---------------------------------------------------------------------------
unsigned char ConReset[6] = {0x02,0x03,0x06,0x30,0x41,0xB3}; //RESET Перезагрузить валидатор

unsigned char ConReACK[6] = {0x02,0x03,0x06,0x00,0xC2,0x82}; //Ответ валидатору что всё нормально...
unsigned char ConGetBT[6] = {0x02,0x03,0x06,0x41,0x4F,0xD1}; //GET BILL TABLE Какие купюры прошиты в валидаторе
unsigned char ConStPoll[6]= {0x02,0x03,0x06,0x33,0xDA,0x81}; //POLL 33H Request for Bill-to-Bill unit activity Status (Перейти в режим получения платежей)
unsigned char ConIdent[6] = {0x02,0x03,0x06,0x37,0xFE,0xC7}; //IDENTIFICATION  37H Request for Model, Serial Number, Country ISO code, Asset Number
//---------------------------------------------------------------------------
struct BillType
{
	int val; //Номинал купюры
	char country[3]; //Код страны
};
//---------------------------------------------------------------------------
int addZero(int val,int cnt);
//---------------------------------------------------------------------------
class Validator
{
private:
	unsigned char ReadAr[255];
protected:
	int Pay;
	ValidatorThread* vThread;
	bool CheckOnCRC(unsigned char* lpBuffer,unsigned long nSize);
public:
	ComPort* cPort;
	bool bNominals; //Удалось ли получить номиналы
	BillType bt[24]; //Список номиналов купюр
	AnsiString BatchNumber, SerialNumber; //Номер партии и серийный

	Validator();
	virtual ~Validator();
        bool SendCommand(std::string req, std::string &ans);
	bool Start(); //открыть порт и проинициализировать валидатор

	bool Reset(); //Перезагрузить валидатор
        bool GetStatus(); //Получить статус валидатора
        bool SetEnableBillTypes(bool enable); //Установить какие купюры разрешены к приёму

        
	bool getSerialNumber(); //Получить номер партии и серийник
	bool getNominals(); //Получить номиналы прошитых купюр
	void LoadSetup();
	void SaveSetup();

	int getPay(int &state);
	void endPay(); //Вызывается при завершении оплаты
	bool startPay(); //Стартуем поток
	bool stopPay(); //Стопим поток

	int GetState(); //Если 0 то всё в порядке
	AnsiString GetStatusDescription(BYTE StatusCode); //Описание статуса
};
//---------------------------------------------------------------------------
extern Validator* validator;
//---------------------------------------------------------------------------
#endif

