/*
	��Դ�࣬
	��������ʱ��������Դ��������Դ(���������յ���ͨ������ϵ)
*/

#pragma once
#include <vector>
#include <string>
#include <map>
#include "CBondMatrix.h"
#include "CPRStrategy.h"
#include "CWaferMatrix.h"

using namespace std;
using namespace ns_mat;
using namespace ns_pr;


#pragma region ����ϵ
typedef struct _COORDSYS_STRUCT
{
	double OriginPtX;
	double OriginPtY;
	int DirectX;
	int DierctY;
	int DierectZ;
}COORDSYS_STRUCT;

#pragma endregion


#ifdef DB_RESCOURCES_EXPORTS
#define DB_RESCOURCES_DLL_API __declspec(dllexport)
#else
#define DB_RESCOURCES_DLL_API //__declspec(dllimport)
#endif

class DB_RESCOURCES_DLL_API CResources
{
private:
	CResources();
	~CResources();

	const BOND_DIR m_BondMatrixSearchDie = BOND_DIR::OrderAndS;

public:
	static CResources* GetInstance();
	static void releaseInstance();

	long GetParam();
	long SetParam();

	//���յ�
	std::map<int, std::vector<int>> GetStepMap(int productID);
	std::vector<int> GetStepList(int productID,int StepListID);
	void SaveStepMap();

	//������ÿ��step��Ӧ�IJ���
	//STEP_PARAM GetStepParamByID(int id);

	//��λ���ݣ�
	CBondMatrix* GetBondMatrix();
	CWaferMatrix* GetWaferMatrix();
	
	//PR���Ӿ����ģ�壬ֻ�轫ģ��ʹ��ģ���PRID��Ӧ������
	CPRStrategy* GetPRStrategyByID(int ModuleID);


	//����ϵ
	//��λ��ת��Ϊȫ������ϵ
	XY_DOUBLE_STRUCT ToGlobalCoord(int moduleID, XY_DOUBLE_STRUCT point);
	X_Y_Z_STRUCT ToGlobalCoord(int moduleID, X_Y_Z_STRUCT point);
	//��ȫ������ϵת��λģ������ϵ
	XY_DOUBLE_STRUCT ToLocalCoord(int moduleID, XY_DOUBLE_STRUCT point);
	X_Y_Z_STRUCT ToLocalCoord(int moduleID, X_Y_Z_STRUCT point);



private:
	static CResources* m_instance;

	//�����productID���ڶ��㲻ͬ��StepListID��������StepID����
	std::map<int,std::map<int, std::vector<int>>> m_mapStep;

	//Bond�ĵ�λ����
	CBondMatrix* m_pBondMatrix = nullptr;
	CWaferMatrix* m_pWaferMatrix = nullptr;

	//��λ����1���������ж���ÿ������ж�Ӧһ�׵�λ����    2���̾�����Ҳ��Ӧ��λ����
	std::map<int, CBondMatrix*> m_mapPositionInfo;//KeyΪID


	//����ϵ
	map<int,COORDSYS_STRUCT> m_vetModuleCoords;//ģ������ϵ
	COORDSYS_STRUCT m_stGlobalCoord;//ȫ������ϵ


};