#pragma once
#include "dt.h"
#include <map>
#include "CMatrixCommon.h"
#include "CManageDB.h"

#ifdef HEAD_TABLE_MATRIX_EXPORTS
#define HEAD_TABLE_CMATRIX_DLL_API __declspec(dllexport)
#else
#define HEAD_TABLE_CMATRIX_DLL_API //__declspec(dllimport)
#endif

using namespace ns_db;

namespace ns_mat
{
	typedef struct
	{
		UINT iHeadIndex;							//���ڵ�ID
		bool bDisable;								//�����õ�
		XY_DOUBLE_STRUCT stPosition;				//�������õ�λ��
	} HEAD_TABLE_MATRIX_POINT_INFO_STRUCT;

	class  HEAD_TABLE_CMATRIX_DLL_API CHeadTableMatrix
	{
	public:
		CHeadTableMatrix(INT iModuleType, string strModuleName);
		LONG LoadMatrix();			//����λ�ú�index

		UINT GetCurrentIndex();							//��ȡ��ǰindex
		LONG SetCurrentIndex(UINT nIndex);				//���õ�ǰindex

		UINT GetIndexPosition(UINT nIndex, XY_DOUBLE_STRUCT& stPos);				//��ȡIndex���Ӧλ��
		
		UINT GetAmount();								//��ȡ����
		//��ȡָ����Բ��λ����Ϣ
		LONG GetPintInfoByIndex(UINT nPtIndex, HEAD_TABLE_MATRIX_POINT_INFO_STRUCT& stPointInfo);

	private:
		static std::mutex m_MatrixMutex;
		bool bIsInitSuccess;

		int m_nModuleType;
		string m_strModuleName;

		//��ǰ��
		UINT m_iCurrentHeadIndex;
		//��������
		UINT m_iHeadAmount;

		CProduct* m_pCProduct = nullptr;

		//vector<PROGRAM_DIE_MATRIX_STRUCT> m_vetDieMatrix;
		PROGRAM_HEAD_TABLE_MATRIX_STRUCT m_vetHeadTableMatrix;

		map<int, HEAD_TABLE_MATRIX_POINT_INFO_STRUCT> m_mapHeadTableMatrixInfo;

	private:

		void SortDir_Z();

	};

}