#pragma once
#define C_MACHINE_EXPORTS
#include "Machine.h"

namespace ns_module
{

	class __declspec(dllexport) CViewInterface
	{
	private:
		static CViewInterface* m_instance;

		bool m_bIsInitSuccess = false;
		CManageDB* m_pCManageDB = nullptr;
		Machine* m_pMachine = nullptr;
		CCameraManage* m_pCameraManage = nullptr;
		CResources* m_pResource = nullptr;
		LONG Init();
	public:
		static CViewInterface* GetInstance();


#pragma region ���淽��ӿ�
	private:
		CXYCalib* GetCalibXY(int iCameraId);
	public:
		/// <summary>
		/// ���ú��
		/// </summary>
		/// <param name="iCameraId">���Id</param>
		/// <param name="LightValue">�ƹ�ֵ</param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>
		long SetRedLight(int iCameraId, int LightValue);

		/// <summary>
		/// �����̹�
		/// </summary>
		/// <param name="LightValue">�ƹ�ֵ</param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>
		long SetGreenLight(int iCameraId, int LightValue);
		/// <summary>
		/// ��������
		/// </summary>
		/// <param name="iCameraId">���Id</param>
		/// <param name="LightValue">�ƹ�ֵ</param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>
		long SetBlueLight(int iCameraId, int LightValue);

		/// <summary>
		/// ���õ��
		/// </summary>
		/// <param name="iCameraId">���Id</param>
		/// <param name="LightValue">�ƹ�ֵ</param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>    
		long SetPointLight(int iCameraId, int LightValue);

		/// <summary>
		/// ��ȡ�ƹ�ֵ
		/// </summary>
		/// <param name="iCameraId">���Id</param>
		/// <param name="redLightValue">��⡣ֵΪ-1ʱ����ʾû�иõ�</param>
		/// <param name="greenLightValue">�̹⡣ֵΪ-1ʱ����ʾû�иõ�</param>
		/// <param name="blueLightValue">���⡣ֵΪ-1ʱ����ʾû�иõ�</param>
		/// <param name="pointLightValue">��⡣ֵΪ-1ʱ����ʾû�иõ�</param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>
		long GetLight(int iCameraId, int& redLightValue, int& greenLightValue, int& blueLightValue, int& pointLightValue);

		/// <summary>
		/// ��ȡ���ͼ�񡣵��ú��������ֱ�����µ����ͼ��ʱ�ŷ���
		/// </summary>
		/// <param name="iCameraId">���Id</param>
		/// <param name="image"></param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>
		long GrabImage(int iCameraId, ImageInfo& image);

		/// <summary>
		/// ��ȡCPK������Ϣ
		/// </summary>
		/// <param name="CpkList">CPK����</param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>
		long GetCpkList(std::vector<CPK_LIST_STRUCT>& CpkList);

		/// <summary>
		/// ��ȡ����ָ��GroupId��������Ϣ
		/// </summary>
		/// <param name="iGroupId">��Id</param>
		/// <param name="strTableName">����</param>
		/// <param name="vecConfig">���ص�������Ϣ</param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>
		long LoadConfigDB(string strTableName, vector<int> iGroupId, vector<CONFIG_BASE_STRUCT>& vecConfig);

		/// <summary>
		/// ����������Ϣ
		/// </summary>
		/// <param name="strTableName">����</param>
		/// <param name="vecConfig">Ҫ�����������Ϣ</param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>
		long SaveConfigDB(string strTableName, vector<CONFIG_BASE_STRUCT> vecConfig);

		/// <summary>
		/// ��ȡ����б�
		/// </summary>
		/// <param name="vecCamera">����б�</param>
		/// <returns>�ɹ�����0�����򷵻ش�����</returns>
		long GetCameraList(vector<CameraInfo>& vecCamera);

		/// <summary>
		/// ����ƶ�����ʾλ��
		/// </summary>
		/// <param name="iCameraId"></param>
		/// <param name="x"></param>
		/// <param name="y"></param>
		/// <returns></returns>
		long CameraMove(int iCameraId, double x, double y);
		long SetVideoCallBackFunc(int iCameraId, CallVideoBack func);


		//��ȡ��������Ϣ
		vector<CAxis*> GetAxisList();
		//�ƶ���
		long ModuleMove(string ModuleType, string AxisType, double pos);
		long ModuleMoveTo(string ModuleType, string AxisType, double pos);

		//���ݸ��ĺ���֪ͨ
		LONG DataChangNotice(string strDbName,string strTableName);
		//�������ݸ��ĺ��֪ͨ
		void RecvDataChangNotice(string strDbName, string strTableName, DataNoticeCallbackFun callBackFun);
		
#pragma endregion
	};

}