#pragma once
#include "Defines.h"
#include "Ini.h"

class CConfig
{
	public:
		//Rom модули
		CString m_strBK10_017_Monitor,
		        m_strBK10_018_Focal,
		        m_strBK10_019_MSTD,
		        m_strBK10_106_basic1,
		        m_strBK10_107_basic2,
		        m_strBK10_108_basic3,
		        m_strBK11_201_bos,
		        m_strBK11_202_ext,
		        m_strBK11_203_mstd,
		        m_strBK11_198_basic1,
		        m_strBK11_199_basic2,
		        m_strBK11_200_basic3,
		        m_strBK11m_324_bos,
		        m_strBK11m_325_ext,
		        m_strBK11m_330_mstd,
		        m_strBK11m_327_basic1,
		        m_strBK11m_328_basic2,
		        m_strBK11m_329_basic3,
		        m_strFDD_Std,
		        m_strFDD_A16M,
		        m_strFDD_SMK512;
		//Директории
		CString m_strBinPath,
		        m_strToolsPath,
		        m_strMemPath,
		        m_strSavesPath,
		        m_strTapePath,
		        m_strScriptsPath,
		        m_strROMPath,
		        m_strIMGPath,
		        m_strScreenShotsPath;
		BOOL m_bSavesDefault;

		//Параметры
		CString m_strBKBoardType;
		WORD    m_CPURunAddr;
		int     m_nCPUFrequency,
		        m_nRegistersDumpInterval,
		        m_nScreenshotNumber,
		        m_nSoundVolume;
		double  m_fCurrentCPUSpeed;

		//Опции
		BOOL    m_bSpeaker,
		        m_bSpeakerFilter,
		        m_bCovox,
		        m_bCovoxFilter,
		        m_bStereoCovox,
		        m_bAY8910,
		        m_bAY8910Filter,
		        m_bBKKeyboard,
		        m_bJoystick,

		        m_bColorMode,
		        m_bAdaptBWMode,
		        m_bFullscreenMode,

		        m_bPauseCPUAfterStart,
		        m_bAskForBreak, /*при чтении/записи из несуществующего адреса не прерываться.
                            (полезно для отладки и не полезно для работы эмулятора)
                            */
		        m_bEmulateLoadTape,
		        m_bEmulateSaveTape,
		        m_bTapeAutoBeginDetection,
		        m_bTapeAutoEnsDetection,

		        m_bShowPerformance,
		        m_bEmulateFDDIO;

		CString m_strAdrDump,
		        m_strAdrAsm;

		//Приводы
		CString m_strDrives[4];
		CString m_strHDDrives[2];

//остальные параметры, которые желательно должны быть доступны глобально.
		BK_FDD_MODEL    m_BKFDDModel; //переменная-посредник, сюда помещается номер модели дисковода перед созданием
		// конфигурации и используется во время создания конфигурации, в остальное время - не нужно.

	protected:
		CIni iniFile; //наш распарсенный ини файл
		CString m_strCurrentPath; //путь к проге
		CString m_strIniFilePath; //полное имя ини файла, с путём

		CString _GetCurrentPath();
		void DefaultConfig();

	public:
		CConfig();
		virtual ~CConfig();
		void InitConfig(const CString &strIniName);
		void UnInitConfig();

		CIni *GetIniObj()
		{
			return &iniFile;
		}

		CString GetDriveImgName(int nDrive);
		void SetDriveImgName(int nDrive, const CString &strPathName);
		CString GetHDDriveImgName(int nDrive);
		CString &GetCurrentPath();
		CString &NormalizePath(CString &strPath);
		CString GetFilePath(const CString &strPath);
		CString GetFileTitle(const CString &strPath);
		CString GetFileName(const CString &strPath);
		CString GetFileExt(const CString &strPath);
		void LoadConfig(BOOL bLoadFromMemory = FALSE, BYTE *pBuff = NULL, UINT nSize = 0);
		ULONGLONG SaveConfig(BOOL bSaveToMemory = FALSE, BYTE *pBuff = NULL, UINT nSize = 0);
		BOOL VerifyRoms();
		int GetBKModelNumber();
		void SetBKModelNumber(int n);
};

