#pragma once

#include "./main.h"
#include "./eraseMedium.h"

#define ERASEMEDIUMUI_OK						0x000
#define ERASEMEDIUMUI_ERROR					0x001
#define ERASEMEDIUMUI_CANCELED				0x002

#define ERASEMEDIUMUI_PRIMOSDKERROR			0x101
#define ERASEMEDIUMUI_UNABLETOCREATEDIALOG	0x102
#define ERASEMEDIUMUI_MESSAGEPUMPERROR		0x103
#define ERASEMEDIUMUI_DRIVENOTSET			0x104
#define ERASEMEDIUMUI_PRIMOSDKNOTSET		0x105
#define ERASEMEDIUMUI_UNABLETOCREATEOBJECT	0x106

class EraseMediumUI
{
public:
	BURNLIB_API EraseMediumUI(void);
	BURNLIB_API ~EraseMediumUI(void);
public:
	BURNLIB_API DWORD Erase(DWORD drive, BOOL discCheck, HWND ownerWnd);
	BURNLIB_API DWORD SetEject(int ejectmode);

protected:
	static LRESULT CALLBACK PrepareWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
	static LRESULT CALLBACK EraseWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
	void OnPrepareInit(HWND hwndDlg);
	void OnPrepareOk();
	void OnEraseInit(HWND hwndDlg);
	void OnEraseTimerClock(void);
	void OnEraseClose(DWORD exitCode);
	static DWORD CALLBACK OnEraseNotify(void *sender, void *param, DWORD eraseCode, DWORD primoCode);



protected:

	DWORD			drive;
	HWND				prepareWnd;
	HWND				eraseWnd;
	EraseMedium		*eraseMedium;
	DWORD			eraseMode;
	DWORD			startTick;	
	unsigned int	actualTime;
	unsigned int	estimateTime;
	DWORD			eraseCode;
	DWORD			primoCode;
	BOOL			discCheck;
};