#pragma once
#include "resource.h"
#include "EditValueCtrl.h"
#include "Condition.h"
#include "CaplFaultMgr.h"
#include "afxwin.h"

// CRefusalFilterDlg dialog

class CRefusalFilterDlg : public CaplTranslateDialog
{
	DECLARE_DYNAMIC(CRefusalFilterDlg)

public:
	CRefusalFilterDlg(CaplFaultMgr *FaultMgr, CWnd* pParent = NULL);   // standard constructor
	virtual ~CRefusalFilterDlg();

	// добавить условие
	void AddNewCondition();
	void AddConditionOperation();
	void AddConditionType();

	// удалить условие
	void DelCondition();

	// подготовка элементов в соответствии с условиями
	void PrepareCondition(CCondition *pCond, int nIndex);

	// увеличиваем/уменьшаем диалог
	void ResizeDialog(bool bIncrease = true);
	void MoveWnd(CWnd *Wnd, bool bIncrease, bool bMoveOnly = true);

	// отображаем элемент управления для ввода значения
	void ShowValueEditCtrl(CComboBox *pBox, CCondition *pCond, int nIndex);

	// увеличить размер выпадающего списка у комбобокса
	void IncreaseComboBoxDroppedList(CComboBox *pBox);

	// получаем значения для условия
	CString GetConditionValue(CCondition *pCond, int nIndex);

	// динамически создатб комбобокс
	void CreateComboBox(CComboBox **pBox, CRect rect);

	// динамически создать строку редактирования
	void CreateEdit(CEdit **pBox, CRect rect, bool bReadOnly = false);

	// динамически создать кнопку
	void CreateButton(CaplButton **pBtn, CRect rect, int nIco);

	// динамически создать CDateTimeCtrl
	void CreateDateTimeCtrl(CDateTimeCtrl **pBox, CRect rect);

	// дизаблим кнопку
	void DisableBtns();

	// создаем шрифт для будущих контролллов
	void CreateFont();

	// чистка
	void ClearMemory();

	// смена итема в комбобоксе
	void ComboBoxNotify(int nID);

	// составить условную SQL на основе диалога
	void BuildSQLbyDialog();

	// составить диалог на основе условной части SQL
	void BuildDialogBySQL();

	// получить по названию атрибута
	CCondition* GetConditionByAttr(CString sAttr);

	// получить по операции
	CConditionOperation* GetOperation(CString sOp);

	// устанавливаем значение
	void SetValue(CEditValueCtrl *pEditValueCtrl, EConditionType type, CString sValue);

// Dialog Data
	enum { IDD = IDD_FILTER };

	CaplButton m_ok_btn;
	CaplButton m_cancel_btn;
	CaplButton m_add;
	CaplButton m_minus;
	CaplButton m_restore;

	CStringArray *m_pSQLparts;
	CArray<CEditValueCtrl*, CEditValueCtrl*> m_caEditCtrl;		// массив элементов, предназначенных для выбора значения
	CArray<CComboBox*, CComboBox*> m_caField;					// массив элементов, предназначенных для выбора параметра  
	CArray<CComboBox*, CComboBox*> m_caOperation;				// массив элементов, предназначенных для выбора условия	

protected:

	int m_nID;
	int m_nTop;
	int m_nSpacesHor;
	int m_nSpacesVert;
	int m_nDefHeight;
	int m_nLeftStart;

	int m_nComboLeftWidth;	
	int m_nComboCenterWidth;
	int m_nValueEditCtrlWidth;

	CFont  m_font;
	LOGFONT m_lf;

	CaplFaultMgr *m_FaultMgr;

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	virtual BOOL OnInitDialog();
	virtual void OnCancel();
	virtual void OnOK();

	inline UINT GetNewId() { return ++m_nID; };

	DECLARE_MESSAGE_MAP()

	afx_msg void OnAdd();
	afx_msg void OnMinus();	
	afx_msg void OnCBN(UINT id);
	afx_msg void OnBtnClick(UINT id);
	afx_msg void OnDestroy();
	afx_msg void OnBnClickedRestore();		
public:
	bool m_add_to_last_found;
	bool m_bUseOrCondition;
	CButton m_add_to_last_found_ctrl;
	CComboBox m_condition_type_combo;
	afx_msg void OnBnClickedOk();
};
