#pragma once
#include <string>
#include <vector>
#include <map>
#include "dt.h"

enum HeadType 
{
	UltraHead,
	EutecticHead,
};


enum CameraList
{
	BondLowCamera = 0,
	BondHighCamera,
	WaffleCamera,
	WaferCamera,
	LookUpCamera,
};

const static std::map<CameraList, std::string> g_mapCameraList = {
	{BondLowCamera,"BondLowCamera"},
	{BondHighCamera,"BondHighCamera"},
	{WaffleCamera,"WaffleCamera"},
	{WaferCamera,"WaferCamera"},
	{LookUpCamera,"BHLookUpCamera"}
};


enum CalibList
{
	BondHighCameraCalib = 0,
	BondLowCameraCalib,
	WaferCameraCalib,
	WaffleCameraCalib,
	LookUpCameraCalib,
	BondHightCTDCalib,
	BondLowCTDCalib,
	WaffleCTDCalib,
	BondRCalib,
};
const static std::map<CalibList, std::string> g_mapCalibList = {
	{BondHighCameraCalib,"BondHighCameraCalib"},
	{BondLowCameraCalib,"BondLowCameraCalib"},
	{WaferCameraCalib,"WaferCameraCalib"},
	{WaffleCameraCalib,"WaffleCameraCalib"},
	{LookUpCameraCalib,"LookUpCameraCalib"},
	{BondHightCTDCalib,"BondHightCTDCalib"},
	{BondLowCTDCalib,"BondLowCTDCalib"},
	{WaffleCTDCalib,"WaffleCTDCalib"},
	{BondRCalib,"BondRCalib"}
};


enum MODULE_LIST {
	WafflePack = 0,					//�����
	WaffleHead,						//�����ȡ��ͷ
	WaffleTransferTable,			//�������ת̨
	WaferTable,						//��Ƭ̨
	Ejector,						//����	
	WaferHead,						//��Ƭȡ��ͷ
	WaferTransferTable,				//��Ƭ̨��ת̨
	BondTable,						//��ͷ
	EutecticTable,					//����̨
	DispenseHead,					//�㽺ͷ
	BondHead,						//�̾�ͷ
	SoliderTable,					//����
	Load1,							//����
	Unload1,						//����
	NozzleTable,					//�����

	Module_Type_Max
};

const static std::map<MODULE_LIST, std::string> g_mapModuleList = {
	{WafflePack,"WafflePack"},
	{WaffleHead,"WaffleHead" },
	{WaffleTransferTable,"WaffleTransferTable" },
	{WaferTable,"WaferTable" },
	{Ejector,"Ejector" },
	{WaferHead,"WaferHead"},
	{WaferTransferTable,"WaferTransferTable"},
	{BondTable,"BondTable"},
	{EutecticTable,"EutecticTable" },
	{DispenseHead,"DispenseHead"},
	{BondHead,"BondHead"},
	{SoliderTable,"SoliderTable"},
	{Load1,"Load1"},
	{Unload1,"Unload1"},
	{NozzleTable,"NozzleTable"},
	//{UltraHead,"UltraHead"},
};


enum COORD_LIST {
	WaferXY = 0,
	HeadZEPZ,
	BondHeadXY,
	WaferHeadXY,
	WaffleHeadXY,
	Coord_MAX
};

//const static MODULE_STRUCT g_stModuleList[Module_Type_Max] = {
//	MODULE_STRUCT(MODULE_LIST::WafflePack,			"�����"),
//	MODULE_STRUCT(MODULE_LIST::WaffleHead,			"�����ȡ��ͷ"),
//	MODULE_STRUCT(MODULE_LIST::WaffleTransferTable,	"�������ת̨"),
//	MODULE_STRUCT(MODULE_LIST::WaferTable,			"��Ƭ̨"),
//	MODULE_STRUCT(MODULE_LIST::Ejector,				"����"),
//	MODULE_STRUCT(MODULE_LIST::WaferHead,			"��Ƭȡ��ͷ"),
//	MODULE_STRUCT(MODULE_LIST::WaferTransferTable,		"��Ƭ̨��ת̨"),
//	MODULE_STRUCT(MODULE_LIST::BondTable,			"�̾�̨"),
//	MODULE_STRUCT(MODULE_LIST::EutecticTable,		"����̨"),
//	MODULE_STRUCT(MODULE_LIST::DispenseHead,		"�㽺ͷ"),
//	MODULE_STRUCT(MODULE_LIST::EutecticHead,			"�̾�ͷ"),
//	MODULE_STRUCT(MODULE_LIST::SoliderTable,		"����"),
//	MODULE_STRUCT(MODULE_LIST::Load1,				"����"),
//	MODULE_STRUCT(MODULE_LIST::Unload1,				"����"),
//	MODULE_STRUCT(MODULE_LIST::NozzleTable,			"�����"),
//};

const static std::map<COORD_LIST, std::string> g_mapCoordList = {
	{COORD_LIST::WaferXY,"WaferXY"},
	{COORD_LIST::WaferHeadXY,"WaferHeadXY"},
	{COORD_LIST::BondHeadXY,"BondHeadXY"},
	{COORD_LIST::WaffleHeadXY,"WaffleHeadXY"},
	{COORD_LIST::HeadZEPZ,"HeadZEPZ"},
};