#pragma once

#include "CDataBaseOperate.H"
#include "CConfigBase.h"

#ifdef CALIB_CONFIG_DLL
#define DLL_CALIB_CONFIG_API __declspec(dllexport)
#else
#define DLL_CALIB_CONFIG_API
#endif

#define CALIBCONFIG_DATABASE_NAME					ROOT_PATH##"\\db\\MachineCalibration.db"
#define CALIB_CTD_TABLE_NAME		                    "Calib_CameraTipDis"
#define CALIB_XY_TABLE_NAME		                        "Calib_XY"
#define CALIB_R_TABLE_NAME		                        "Calib_R"
#define CALIB_STEP_R_RESULT_TABLE_NAME		            "Calib_R_Result"
#define FORCE_CONTROL_TABLE_NAME                        "Force_Control"
#define HORIZONTAL_MEASURE_TABLE_NAME                   "Horizontal_Measure"
#define VERTICAL_MEASURE_TABLE_NAME                     "Vertical_Measure"
#define CALIB_TIP_RESULT                                "Tip_R_CTD_CalibResult"


//#define BOND_LOW_CAMERA_CALIB_TABLE_NAME			"BondLowCamera"
//#define BOND_HIGH_CAMERA_CALIB_TABLE_NAME			"BondHighCamera"
//#define BOND_WAFFLE_CAMERA_CALIB_TABLE_NAME			"WaffleCamera"
//#define BOND_WAFER_CAMERA_CALIB_TABLE_NAME			"WaferCamera"
//#define BOND_LOOKUP_CAMERA_CALIB_TABLE_NAME			"BHLookUpCamera"


namespace ns_db
{

    class DLL_CALIB_CONFIG_API CCalibrationConfig : public CDataBaseOperate
    {
	public:
		CCalibrationConfig();

		LONG GetConfigParam(string strTableName, vector<MODULE_CONFIG_STRUCT>& vecConfig);
		LONG GetConfigParam(string strTableName, vector<CONFIG_BASE_STRUCT>& vecConfig);

		LONG SetConfigParam(string strTableName, vector<MODULE_CONFIG_STRUCT> vecconfig);
		LONG SetConfigParam(string strTableName, vector<CONFIG_BASE_STRUCT> vecconfig);

	private:
		std::unique_ptr<CConfigBase> m_ConfigBaseDb;

		LONG SaveDB() override;
		LONG LoadDB() override;


#pragma region XYCALIB
	private:
		std::vector<CONFIG_BASE_STRUCT>  m_vecXYCalibParam;
	public:
		LONG GetXYCalibParam(vector<MODULE_CONFIG_STRUCT>* vecconfig);
		vector<CONFIG_BASE_STRUCT> GetXYCalibParam() { return m_vecXYCalibParam; }
		LONG SetXYCalibParam(vector<MODULE_CONFIG_STRUCT> vecconfig);
		LONG SetXYCalibParam(vector<CONFIG_BASE_STRUCT> vecconfig);

#pragma endregion

#pragma region LookUpCalib
	private:
		std::vector<CONFIG_BASE_STRUCT>  m_vecCTDCalibParam;
	public:
		LONG GetCTDCalibParam(vector<MODULE_CONFIG_STRUCT>* vecconfig);
		vector<CONFIG_BASE_STRUCT> GetCTDCalibParam() { return m_vecCTDCalibParam; }
		LONG SetCTDCalibParam(vector<MODULE_CONFIG_STRUCT> vecconfig);
		LONG SetCTDCalibParam(vector<CONFIG_BASE_STRUCT> vecconfig);
#pragma endregion

#pragma region RCalib
	private:
		std::vector<CONFIG_BASE_STRUCT>  m_vecRCalibParam;
	public:
		LONG GetRCalibParam(vector<MODULE_CONFIG_STRUCT>* vecconfig);
		vector<CONFIG_BASE_STRUCT> GetRCalibParam() { return m_vecRCalibParam; }
		LONG SetRCalibParam(vector<MODULE_CONFIG_STRUCT> vecconfig);
		LONG SetRCalibParam(vector<CONFIG_BASE_STRUCT> vecconfig);
#pragma endregion

#pragma region ForceCalib
	private:
		std::vector<CONFIG_BASE_STRUCT>  m_vecForceCalib;
	public:
		LONG GetForceCalibParam(vector<MODULE_CONFIG_STRUCT>* vecconfig);
		vector<CONFIG_BASE_STRUCT> GetForceCalibParam() { return m_vecForceCalib; }
		LONG SetForceCalibParam(vector<MODULE_CONFIG_STRUCT> vecconfig);
		LONG SetForceCalibParam(vector<CONFIG_BASE_STRUCT> vecconfig);

//#pragma region BondHighCamera
//	private:
//		std::vector<CONFIG_BASE_STRUCT>  m_vecConfig_BondHighCamera;
//	public:
//		LONG GetConfigParam_BondHighCamera(vector<MODULE_CONFIG_STRUCT>* vecconfig);
//		vector<CONFIG_BASE_STRUCT> GetConfigParam_BondHighCamera() { return m_vecConfig_BondHighCamera; };
//		LONG SetConfigParam_BondHighCamera(vector<CONFIG_BASE_STRUCT> vecconfig);
//		LONG SetConfigParam_BondHighCamera(vector<MODULE_CONFIG_STRUCT> vecconfig);
//#pragma endregion	
//
//#pragma region BondLowCamera
//	private:
//		std::vector<CONFIG_BASE_STRUCT>  m_vecConfig_BondLowCamera;
//	public:
//		LONG GetConfigParam_BondLowCamera(vector<MODULE_CONFIG_STRUCT>* vecconfig);
//		vector<CONFIG_BASE_STRUCT> GetConfigParam_BondLowCamera() { return m_vecConfig_BondLowCamera; };
//		LONG SetConfigParam_BondLowCamera(vector<CONFIG_BASE_STRUCT> vecconfig);
//		LONG SetConfigParam_BondLowCamera(vector<MODULE_CONFIG_STRUCT> vecconfig);
//#pragma endregion	
//
//#pragma region WaferCamera
//	private:
//		std::vector<CONFIG_BASE_STRUCT>  m_vecConfig_WaferCamera;
//	public:
//		LONG GetConfigParam_WaferCamera(vector<MODULE_CONFIG_STRUCT>* vecconfig);
//		vector<CONFIG_BASE_STRUCT> GetConfigParam_WaferCamera() { return m_vecConfig_WaferCamera; };
//		LONG SetConfigParam_WaferCamera(vector<CONFIG_BASE_STRUCT> vecconfig);
//		LONG SetConfigParam_WaferCamera(vector<MODULE_CONFIG_STRUCT> vecconfig);
//#pragma endregion	
//
//#pragma region WaffleCamera
//	private:
//		std::vector<CONFIG_BASE_STRUCT>  m_vecConfig_WaffleCamera;
//	public:
//		LONG GetConfigParam_WaffleCamera(vector<MODULE_CONFIG_STRUCT>* vecconfig);
//		vector<CONFIG_BASE_STRUCT> GetConfigParam_WaffleCamera() { return m_vecConfig_WaffleCamera; };
//		LONG SetConfigParam_WaffleCamera(vector<CONFIG_BASE_STRUCT> vecconfig);
//		LONG SetConfigParam_WaffleCamera(vector<MODULE_CONFIG_STRUCT> vecconfig);
//#pragma endregion	
//
//#pragma region BHLookUpCamera
//	private:
//		std::vector<CONFIG_BASE_STRUCT>  m_vecConfig_BHLookUpCamera;
//	public:
//		LONG GetConfigParam_BHLookUpCamera(vector<MODULE_CONFIG_STRUCT>* vecconfig);
//		vector<CONFIG_BASE_STRUCT> GetConfigParam_BHLookUpCamera() { return m_vecConfig_BHLookUpCamera; };
//		LONG SetConfigParam_BHLookUpCamera(vector<CONFIG_BASE_STRUCT> vecconfig);
//		LONG SetConfigParam_BHLookUpCamera(vector<MODULE_CONFIG_STRUCT> vecconfig);
//#pragma endregion	

    };

}