#pragma once
#include "afxcmn.h"
#include <vector>
#include "afxdtctl.h"
#include "Lock.h"

class CSC_DelfilesFactory;
interface ISC_DelFilesInterface;

typedef struct SPickupInfo
{
	CString		strName;				// �ֵ���
	CString		strBranchid;			// �ֵ�id
	CString		strOrder;				// ������
	BOOL		bTakestatus;			// ȡ��״̬:falseδȡ,true��ȡ
	CString		strTaketime;			// ����������ȡ��ʱ��
	
	BOOL		bOpdel;					// ԭƬɾ��״̬
	BOOL		bOpNeedDel;				// ԭƬ�Ƿ���Ҫɾ��
	BOOL		bEpdel;					// ����ɾ��״̬
	BOOL		bEpNeedDel;				// �����Ƿ���Ҫɾ��
	BOOL		bFpdel;					// ����ɾ��״̬
	BOOL		bFpNeedDel;				// �����Ƿ���Ҫɾ��
	BOOL		bDpdel;					// ���ɾ��״̬
	BOOL		bDpNeedDel;				// ����Ƿ���Ҫɾ��

	BOOL		bOpbdel;				// ԭƬ����ɾ��״̬
	BOOL		bOpbNeedDel;			// ԭƬ�����Ƿ���Ҫɾ��
	BOOL		bEpbdel;				// ���ޱ���ɾ��״̬
	BOOL		bEpbNeedDel;			// ���ޱ����Ƿ���Ҫɾ��
	BOOL		bFpbdel;				// ���ޱ���ɾ��״̬
	BOOL		bFpbNeedDel;			// ���ޱ����Ƿ���Ҫɾ��
	BOOL		bDpbdel;				// ��Ʊ���ɾ��״̬
	BOOL		bDpbNeedDel;			// ��Ʊ����Ƿ���Ҫɾ��

	CString		strOpdeltm;				// ԭƬɾ��ʱ��
	CString		strEpdeltm;				// ����ɾ��ʱ��
	CString		strFpdeltm;				// ����ɾ��ʱ��
	CString		strDpdeltm;				// ���ɾ��ʱ��

	CString		strOpbdeltm;			// ԭƬ����ɾ��ʱ��
	CString		strEpbdeltm;			// ���ޱ���ɾ��ʱ��
	CString		strFpbdeltm;			// ���ޱ���ɾ��ʱ��
	CString		strDpbdeltm;			// ��Ʊ���ɾ��ʱ��

	SPickupInfo()
	{
		strName = _T("");
		strBranchid = _T("");
		strOrder = _T("");
		bTakestatus = FALSE;
		strTaketime = _T("");

		bOpdel = FALSE;					// ԭƬɾ��״̬
		bOpNeedDel = FALSE;				// ԭƬ�Ƿ���Ҫɾ��
		bEpdel = FALSE;					// ����ɾ��״̬
		bEpNeedDel = FALSE;				// �����Ƿ���Ҫɾ��
		bFpdel = FALSE;					// ����ɾ��״̬
		bFpNeedDel = FALSE;				// �����Ƿ���Ҫɾ��
		bDpdel = FALSE;					// ���ɾ��״̬
		bDpNeedDel = FALSE;				// ����Ƿ���Ҫɾ��

		bOpbdel = FALSE;				// ԭƬ����ɾ��״̬
		bOpbNeedDel = FALSE;			// ԭƬ�����Ƿ���Ҫɾ��
		bEpbdel = FALSE;				// ���ޱ���ɾ��״̬
		bEpbNeedDel = FALSE;			// ���ޱ����Ƿ���Ҫɾ��
		bFpbdel = FALSE;				// ���ޱ���ɾ��״̬
		bFpbNeedDel = FALSE;			// ���ޱ����Ƿ���Ҫɾ��
		bDpbdel = FALSE;				// ��Ʊ���ɾ��״̬
		bDpbNeedDel = FALSE;			// ��Ʊ����Ƿ���Ҫɾ��

		strOpdeltm = _T("");
		strEpdeltm = _T("");
		strFpdeltm = _T("");
		strDpdeltm = _T("");

		strOpbdeltm = _T("");
		strEpbdeltm = _T("");
		strFpbdeltm = _T("");
		strDpbdeltm = _T("");
	}
}SPICKUPINFO, *LPSPICKUPINFO;

typedef struct _SBakDirInfo
{
	BYTE		byPhotoType;
	CString		strDir;
}SBAKDIRINFO, *LPSBAKDIRINFO;

// CPhotoDelMgr �Ի���

class CPhotoDelMgr : public CDialog
{
	DECLARE_DYNAMIC(CPhotoDelMgr)

public:
	CPhotoDelMgr(CWnd* pParent = NULL);   // ��׼���캯��
	virtual ~CPhotoDelMgr();

// �Ի�������
	enum { IDD = IDD_PHOTODELMGR_DLG };

	virtual BOOL OnInitDialog();

	
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ֧��
	afx_msg void OnDestroy();
	afx_msg void OnBnClickedStartdelBtn();
	afx_msg void OnBnClickedSelectallBtn();
	afx_msg void OnBnClickedDeletelogBtn();
	afx_msg void OnBnClickedUnallselBtn();
	afx_msg void OnBnClickedSetAutodelBtn();
	afx_msg void OnBnClickedRefreshBtn();
	afx_msg void OnNMClickDelinfoList(NMHDR *pNMHDR, LRESULT *pResult);
	afx_msg void OnNMClickDeltypeList(NMHDR *pNMHDR, LRESULT *pResult);
	afx_msg LRESULT ShowPrompting(WPARAM wParam,LPARAM lParam);
	DECLARE_MESSAGE_MAP()

public:
	void FillData();
	void GetShareBackupDir();
	void LoadListData();
	int	OpenDb(IN LPCTSTR lpConnect);
	void CleareLog(IN std::vector<LPSPICKUPINFO>& vLog);
	int	 LoadDelPhotoModule(IN HINSTANCE hInstance);
	void FillPhotoType(IN const int nIdx);
	void FillPhotoType(IN const LPSPICKUPINFO lp);
	int	 GetTimeField(OUT CString& strField);
	void AddDelData(IN LPCTSTR lpDomain, IN LPCTSTR lpOrder, IN const BYTE nType);
	void GetBranchInfo(OUT CArray<CStringArray, CStringArray>& arr);
	void ClearBakDirInfo();

	static CString GetBranchNameForDomain(IN CArray<CStringArray, CStringArray>* pArr, IN const CString& strDomain);
	static CString GetDomainForBranchName(IN CArray<CStringArray, CStringArray>* pArr, IN const CString& strName);

	//ɾ����Ƭ��ɻص�����
	static int WINAPI DelFinish(IN LPVOID lpParam1, IN LPVOID lpParam2, IN LPVOID lpParam3, IN LPVOID lpParam4, IN LPVOID lpParam5, IN LPVOID lpParam6);
	int WINAPI DelFinishPro(IN LPVOID lpParam1, IN LPVOID lpParam2, IN LPVOID lpParam3, IN LPVOID lpParam4, IN LPVOID lpParam5, IN LPVOID lpParam6);

	void MakeBackupDir(IN CONST int nType, IN CONST CString& str, OUT CString& strPath);

public:
	CListCtrl					m_DelList;						//��ȡ���б�
	CListCtrl					m_PhotoTypeList;				//��Ƭ����
	CDateTimeCtrl				m_StartTime;					//��ʼʱ��(�Խ���ʱ������ǰһ����ʱ��)
	CDateTimeCtrl				m_EndTime;						//����ʱ��(����Ϊ����ʱ��)

	std::vector<LPSPICKUPINFO>	m_vPickupLog;					//��ȡ���ļ�¼
	std::vector<LPSPICKUPINFO>	m_vCurrSelLog;					//��ǰѡ���ҹ�ѡ�ļ�¼��
	LPSPICKUPINFO				m_lpCurrSel;					//��ǰѡ���ҹ�ѡ�ļ�¼

	CSC_DelfilesFactory*		m_pFactory;
	ISC_DelFilesInterface*		m_pInterface;

	CArray<CStringArray, CStringArray> m_BranchArr;				//�ֵ���Ϣ
	std::vector<LPSBAKDIRINFO>	m_vBackupDirInfos;				//����Ŀ¼

	TCHAR						m_szConnect[MAX_PATH];			//���ݿ�����
	CLock						m_lock;
	CDatabase*					m_pdb;
	CRichEditCtrl				m_DelTips;
};