// ScriptRunner.h: interface for the CScriptRunner class.
//

#pragma once

class CMotherBoard;

using ScriptArgList = std::list<CString>;
// замедлитель. чтобы передаваемые символы не терялись
constexpr auto TICK_DELAY = 70;
// задержка начала выполнения скрипта в миллисекундах
constexpr auto SCRIPT_START_DELAY = 1000;

class CScriptRunner
{
		int                 m_nScriptLinePos{ 0 };
		int                 m_nScriptLineLen{ 0 };
		ULONGLONG           m_nScriptCurrTick{ 0 };
		ULONGLONG           m_nScriptPDCurrTick{ 0 };
		CStdioFile          m_fileScript;
		fs::path            m_pathScriptFile;
		CString             m_strScriptLine;
		ULONGLONG           m_nTickDelay{ SCRIPT_START_DELAY };
		UINT                m_nTickPDDelay{ 1 };
		bool                m_bStopButton{ false };
		bool                m_bRus{ false };
		bool                m_bIsAr2Press{ false }; // флаг нажатия АР2
		bool                m_bPressDelay{ false }; // флаг удержания клавиши
		bool                m_bRegularKey{ false }; // флаг нажатия обычной кнопки
		bool                m_bHasScript{ false };

		ScriptArgList       m_listArgs;

		bool                CheckEscChar(TCHAR ch);
		int                 ParseArg();
		int                 ParseArg8();
		void                ParseNextChar(TCHAR ch);
		void                SendKoiChar(uint8_t ch);

	public:
		CScriptRunner();
		virtual ~CScriptRunner();

		void                SetScript(const fs::path &pathScriptPath, const fs::path &pathScriptFileName, bool bXlat);
		void                StopScript();
		void                SetArgumentList(ScriptArgList &ArgList);
		void                SetArgument(const CString &strArg);
		bool                RunScript();
};
