#pragma once
#define C_PR_STRATEGY_EXPORTS
#include "CPrStrategy.h"
#include "CModule.h"
#include "CCameraBase.h"
#include "CXYCalib.h"
#include "CRCalib.h"
#include "CLookUpCalib.h"
#include "CNozzleTable.h"
#include "CBondMatrix.h"
#include "CForceControl.h"
#include "CBondHead.h"
using namespace ns_db;
/*
1���̾�ͷ:�и߱�������ͱ�������������
2�������̾����㽺������
3��ע������λ��Ϊ���λ�ã���ת��Ϊ��ͷλ��
4��ִ�ж�����������������жϷ���ֵ��"ֹͣ"��Ҫ���е��ûس�ʼλ
*/

class  __declspec(dllexport) CEutecticHead :
	public CBondHead
{

public:
	CEutecticHead(MODULE_LIST eModuleType);
	~CEutecticHead();

	virtual void SetHighCamera(CCameraBase* camera)override { m_pHighCamera = camera; }

	CXYCalib* GetHighCameraCalib() { return m_pHighXYCalib; }
	CCTDCalib* GetHighCTDCalib() { return m_pHighCTDCalib; }
	LONG CreateTemplate_HighCamera(SEARCH_OUT eResultSelect, UINT & iTemplateId);
	LONG CreateTemplate_LowCamera(SEARCH_OUT eResultSelect, UINT& iTemplateId);

	virtual void SetDataChangFunction() override;
	virtual LONG SetParam() override;
	virtual LONG GetParam() override;
	virtual LONG ToHome() override;
	virtual LONG ToSafePosition() override;
	virtual LONG InitResource() override;
	virtual void DataChangNotice(string strDbName, string strTableName) override;

	virtual void SetPickHTestIndex(int index) override;
	virtual void SetBondHTestIndex(int index) override;
	virtual LONG PickHighTest() override;//����֮ǰ��SetIndex
	virtual LONG AllBondHighTest() override;
	virtual LONG BongHighTest() override;
	virtual LONG VacuumOn(long lDelay) override;		//��տ�
	virtual LONG VacuumOff(long lDelay) override;		//��չ�,������ʱ��ms 
	virtual LONG StrongOn() override;		//ǿ����
	virtual LONG StrongOff() override;		//ǿ����

	//��������
	//virtual LONG ChangeNozzle(int nozzleIndex)override;
	//virtual LONG UnLoadNozzle()override;
	//virtual LONG LoadNozzle(int nozzleIndex)override;
	//virtual LONG CheckDieExistStatus(bool& bExist)override;

	LONG CameraCTDCalib(int calibID);


	//����ȡ��,������ֵ������Ҫ���е��ûذ�ȫλ��
	virtual LONG MoveToGrabPos(bool waitDone = true)override;
	//���գ�ȡ���������е���������λ����Ҫ�����Զ�����
	virtual LONG PickDie(int index)override;
	//�ƶ���ʰȡλ��δ����
	//virtual LONG MoveToPickPos()override;
	//��ת̨���գ��������ս�������ս��������ʰȡƫ�ƣ����洢
	virtual LONG PickGrab(int index, X_Y_ANGLE_STRUCT& result)override;
	//�õ����ս���󲹳��������ݽ���ת��
	virtual LONG PickDieDown(int index, X_Y_ANGLE_STRUCT result)override;
	virtual LONG PickUpToGrabPos()override;
	virtual LONG PickDieUp(bool waitDone = true)override;//���е���ȫλ��

	//��������
	virtual LONG XYZToLookUpGrabPos()override;
	//�ƶ�����������λ�����ս���ŵ��ṹ����
	virtual LONG LookUpGrab(int index,X_Y_ANGLE_STRUCT& result)override;

	//����̾�
	virtual LONG PlaceDie(int index, X_Y_ANGLE_STRUCT lookUpOffsetPixel)override;
	virtual LONG MoveToBondPos(int index)override;//�޸�ΪBondGrabPos
	//���ص����ս��Ϊ������λ
	virtual LONG BondGrab(int index, X_Y_ANGLE_STRUCT& result)override;
	virtual LONG ToBondPos_AddOffset(int index, X_Y_ANGLE_STRUCT bondOffset, X_Y_ANGLE_STRUCT lookUpOffset,
		bool waitDone = true)override;//���������
	virtual LONG BondDieDown(int index)override;//���������
	virtual LONG BondDieUp(bool waitDone = true)override;

//	virtual LONG FindForce(double endPos)override;		//�����Զ�����
//	virtual LONG UpdateForce(double dForce)override;		//�л����Ĵ�С

	//�궨
	virtual LONG HighCameraCTDCalib() override;

private:

	CCameraBase* m_pHighCamera = nullptr;

	CXYCalib* m_pHighXYCalib = nullptr;
	CCTDCalib* m_pHighCTDCalib = nullptr;
};