#pragma once

#include "IPropertySheet.h"
#include "PropertySheetHelper.h"
#include "PageConfig.h"
#include "PageInput.h"
#include "PageSound.h"
#include "PageDisk.h"
#include "PageAdvanced.h"

class CPropertySheet : public IPropertySheet
{
public:
	CPropertySheet() :
		m_PageConfig(m_PropertySheetHelper),
		m_PageInput(m_PropertySheetHelper),
		m_PageSound(m_PropertySheetHelper),
		m_PageDisk(m_PropertySheetHelper),
		m_PageAdvanced(m_PropertySheetHelper)
	{
	}
	virtual ~CPropertySheet(){}

	virtual void Init(void);
	virtual uint32_t GetVolumeMax(void);								// TODO:TC: Move out of here
	virtual bool SaveStateSelectImage(HWND hWindow, bool bSave);	// TODO:TC: Move out of here
	void ApplyNewConfig(const CConfigNeedingRestart& ConfigNew, const CConfigNeedingRestart& ConfigOld)
	{
		m_PropertySheetHelper.ApplyNewConfig(ConfigNew, ConfigOld);
	}
	void ApplyNewConfigFromSnapshot(const CConfigNeedingRestart& ConfigNew)
	{
		m_PropertySheetHelper.ApplyNewConfigFromSnapshot(ConfigNew);
	}
	void ConfigSaveApple2Type(eApple2Type apple2Type)
	{
		m_PropertySheetHelper.ConfigSaveApple2Type(apple2Type);
	}

	virtual UINT GetScrollLockToggle(void){ return m_PageInput.GetScrollLockToggle(); }
	virtual void SetScrollLockToggle(UINT uValue){ m_PageInput.SetScrollLockToggle(uValue); }
	virtual UINT GetJoystickCursorControl(void){ return m_PageInput.GetJoystickCursorControl(); }
	virtual void SetJoystickCursorControl(UINT uValue){ m_PageInput.SetJoystickCursorControl(uValue); }
	virtual UINT GetJoystickCenteringControl(void){ return m_PageInput.GetJoystickCenteringControl(); }
	virtual void SetJoystickCenteringControl(UINT uValue){ m_PageInput.SetJoystickCenteringControl(uValue); }
	virtual UINT GetAutofire(UINT uButton) { return m_PageInput.GetAutofire(uButton); }
	virtual void SetAutofire(UINT uValue) { m_PageInput.SetAutofire(uValue); }
	virtual bool GetButtonsSwapState(void) { return m_PageInput.GetButtonsSwapState(); }
	virtual void SetButtonsSwapState(bool value) { m_PageInput.SetButtonsSwapState(value); }
	virtual UINT GetMouseShowCrosshair(void){ return m_PageInput.GetMouseShowCrosshair(); }
	virtual void SetMouseShowCrosshair(UINT uValue){ m_PageInput.SetMouseShowCrosshair(uValue); }
	virtual UINT GetMouseRestrictToWindow(void){ return m_PageInput.GetMouseRestrictToWindow(); }
	virtual void SetMouseRestrictToWindow(UINT uValue){ m_PageInput.SetMouseRestrictToWindow(uValue); }
	virtual UINT GetTheFreezesF8Rom(void){ return m_PageAdvanced.GetTheFreezesF8Rom(); }
	virtual void SetTheFreezesF8Rom(UINT uValue){ m_PageAdvanced.SetTheFreezesF8Rom(uValue); }

private:
	CPropertySheetHelper m_PropertySheetHelper;
	CPageConfig m_PageConfig;
	CPageInput m_PageInput;
	CPageSound m_PageSound;
	CPageDisk m_PageDisk;
	CPageAdvanced m_PageAdvanced;
};
