// OtherDlg.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "OtherDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// COtherDlg dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_Other_Add.h"


COtherDlg::COtherDlg(CWnd* pParent /*=NULL*/)
	: CDialog(COtherDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(COtherDlg)
	m_tBegin = COleDateTime::GetCurrentTime();
	m_tEnd = COleDateTime::GetCurrentTime();
	m_bOld = FALSE;
	m_lCorp = -1;
	m_strGDText = _T("");
	m_strHTML = _T("");
	m_lVerSel = -1;
	m_lOverBegin = -1;
	m_lOverEnd = -1;
	m_bOverFilt = FALSE;
	m_lOverPercent = -1;
	//}}AFX_DATA_INIT

	m_bInit = false;
	m_bRefresh = false;
}


void COtherDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COtherDlg)
	DDX_Control(pDX, IDC_OTHER_GIF2, m_B_Gif);
	DDX_Control(pDX, IDC_OTHER_LIST, m_wndList);
	DDX_Control(pDX, IDC_OTHER_MSG, m_E_Msg);
	DDX_Control(pDX, IDC_OTHER_CORP, m_L_Corp);
	DDX_DateTimeCtrl(pDX, IDC_OTHER_TBEGIN, m_tBegin);
	DDX_DateTimeCtrl(pDX, IDC_OTHER_TEND, m_tEnd);
	DDX_Check(pDX, IDC_OTHER_OLD, m_bOld);
	DDX_CBIndex(pDX, IDC_OTHER_CORP, m_lCorp);
	DDX_Text(pDX, IDC_OTHER_GDTEXT, m_strGDText);
	DDV_MaxChars(pDX, m_strGDText, 500);
	DDX_Text(pDX, IDC_OTHER_HTML, m_strHTML);
	DDV_MaxChars(pDX, m_strHTML, 60);
	DDX_CBIndex(pDX, IDC_OTHER_VERSEL, m_lVerSel);
	DDX_CBIndex(pDX, IDC_OVER_BEGIN, m_lOverBegin);
	DDX_CBIndex(pDX, IDC_OVER_END, m_lOverEnd);
	DDX_Check(pDX, IDC_OVER_FILT, m_bOverFilt);
	DDX_CBIndex(pDX, IDC_OVER_PERCENT, m_lOverPercent);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(COtherDlg, CDialog)
	//{{AFX_MSG_MAP(COtherDlg)
	ON_BN_CLICKED(IDC_OTHER_QUERY, OnOtherQuery)
	ON_BN_CLICKED(IDC_OTHER_QUERY2, OnOtherQuery2)
	ON_BN_CLICKED(IDC_CORP_LXR_ADD, OnCorpLxrAdd)
	ON_BN_CLICKED(IDC_CORP_LXR_MODIFY, OnCorpLxrModify)
	ON_BN_CLICKED(IDC_OTHER_NUM_DEL, OnOtherNumDel)
	ON_NOTIFY(NM_DBLCLK, IDC_OTHER_LIST, OnDblclkOtherList)
	ON_BN_CLICKED(IDC_OTHER_TEXT, OnOtherText)
	ON_BN_CLICKED(IDC_OTHER_GIF, OnOtherGif)
	ON_BN_CLICKED(IDC_OTHER_REFRESH, OnOtherRefresh)
	ON_BN_CLICKED(IDC_OVER_SETUP, OnOverSetup)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COtherDlg message handlers

BOOL COtherDlg::RefreshInfo()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_TAB) )
	{
		return false;
	}
	if (!UpdateData(true) )
		return false;
	m_pMainFrame->SendFrame(SMSFUNC_CORP_NAME,NULL,0);
    m_pMainFrame->SendFrame(SMSFUNC_REPORTNUM_SEE,NULL,0);

	REQ_Other_Text_See * pSee=new REQ_Other_Text_See;
	pSee->lVerSel = m_lVerSel;
	m_pMainFrame->SendFrame(SMSFUNC_OTHERTEXT_SEE,(BYTE*)pSee,sizeof(REQ_Other_Text_See));

	REQ_Other_Gif_See * pSee2=new REQ_Other_Gif_See;
	pSee2->lVerSel = m_lVerSel;

	m_pMainFrame->SendFrame(SMSFUNC_OTHERGIF_SEE,(BYTE*)pSee2,sizeof(REQ_Other_Gif_See));

	m_pMainFrame->SendFrame(SMSFUNC_OTHEROVER_SEE,NULL,0);
	return true;
}

BOOL COtherDlg::ReHide()
{
	ShowWindow( SW_HIDE );
	return true;
}

BOOL COtherDlg::ReShow(BOOL bRefresh)
{
	ShowWindow( SW_SHOW );
	if ( bRefresh || !m_bRefresh )
	{
		RefreshInfo();
	}
	return true;
}

BOOL COtherDlg::ProcessSocket(Socket_Head *pHead)
{
	//ȡ������Ϣ
	if (pHead->lFuncType == SMSFUNC_CORP_NAME)
	{
		m_bRefresh = true;  //�Ѿ�ˢ�¹�
		ANS_Corp_Name     * pCorp = (ANS_Corp_Name *)pHead->pFrame;
		ANS_Corp_NameData * pData = (ANS_Corp_NameData *)(pHead->pFrame+sizeof(ANS_Corp_Name));
		m_L_Corp.ResetContent();  //ɾ��ԭ���е���ҵ
		m_L_Corp.AddString( _T("������ҵ") );
		this->Close();              //�ر�ԭ����
		for ( int i=0;i<pCorp->lCount;i++ )
		{
			ANS_Corp_NameData * pNewData = new ANS_Corp_NameData;
			*pNewData = *pData;
			POSITION pos = m_Corp.AddTail(pNewData);
			long lItem = m_L_Corp.AddString( pData->szCorpName );
			m_L_Corp.SetItemData( lItem , (DWORD)pos);
			pData ++;
		}
		m_L_Corp.SetCurSel(0);
		return true;
	}
	//ȡ���ͼ�¼
	if (pHead->lFuncType == SMSFUNC_SUCCEED)
	{
		ANS_Succeed     * pSucceed = (ANS_Succeed *)pHead->pFrame;
		m_E_Msg.SetWindowText( pSucceed->szMsg);
		return true;
	}
	//ȡMonLog
	if (pHead->lFuncType == SMSFUNC_SMSLOG)
	{
		ANS_SmsLog     * pSmsLog = (ANS_SmsLog *)pHead->pFrame;
		m_E_Msg.SetWindowText( pSmsLog->szMsg);
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_REPORTNUM_SEE )
	{
		ANS_ReportNum_See *  pRetSee =(ANS_ReportNum_See*)pHead->pFrame;
		ANS_ReportNum_Data * pRetData=(ANS_ReportNum_Data*)(pHead->pFrame+sizeof(ANS_ReportNum_See));
		m_wndList.DeleteAllItems();
		TCHAR szBuf[32]={0};
		for (int i=0 ; i< pRetSee->lCount ; i++ )
		{
			m_wndList.InsertItem( i , _itot(i+1,szBuf,10));
			m_wndList.SetItemText(i,1,pRetData->szName);
			m_wndList.SetItemText(i,2,pRetData->szMobile);
			m_wndList.SetItemData(i,pRetData->lID);
			pRetData++;
		}
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_REPORTNUM_ADD )
	{
		ANS_ReportNum_Add *  pAdd =(ANS_ReportNum_Add*)pHead->pFrame;
		if ( pAdd->lID > 0 )
		{
			TCHAR szBuf[32]={0};
			long lCount = m_wndList.GetItemCount();
			m_wndList.InsertItem( lCount , _itot(lCount+1,szBuf,10));
			m_wndList.SetItemText(lCount,1,pAdd->szName);
			m_wndList.SetItemText(lCount,2,pAdd->szMobile);
			m_wndList.SetItemData(lCount,pAdd->lID);
		}
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_REPORTNUM_MODIFY )
	{
		ANS_ReportNum_Modify *  pModify =(ANS_ReportNum_Modify*)pHead->pFrame;
		if ( pModify->lItemID>=0 )
		{
			m_wndList.SetItemText(pModify->lItemID,1,pModify->szName);
			m_wndList.SetItemText(pModify->lItemID,2,pModify->szMobile);
		}
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_REPORTNUM_DEL )
	{
		ANS_ReportNum_Del *  pDel =(ANS_ReportNum_Del*)pHead->pFrame;
		if ( pDel->lItemID>=0 )
		{
			m_wndList.DeleteItem(pDel->lItemID);
		}
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_OTHERTEXT_SEE)
	{
		ANS_Other_Text_Data *  pText =(ANS_Other_Text_Data*)pHead->pFrame;
		UpdateData(true);
		m_strGDText = pText->szText;
		m_strHTML   = pText->szHTML;
		UpdateData(false);
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_OTHERTEXT )
	{
		ANS_Other_Text *  pText =(ANS_Other_Text*)pHead->pFrame;
		if ( pText->bOK )
		{
			MessageBox( _T("�޸Ŀͻ��˹�����Ϣ�ɹ���"),_T("��Ϣ"),MB_ICONINFORMATION);
		}
		else
		{
			MessageBox( _T("�޸Ŀͻ��˹�����Ϣʧ�ܣ�"),_T("����"),MB_ICONWARNING);
		}
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_OTHERGIF_SEE)
	{
		ANS_Other_Gif_Data *  pGif =(ANS_Other_Gif_Data*)pHead->pFrame;
		BYTE * pGifData = (BYTE*)pHead->pFrame +sizeof(ANS_Other_Gif_Data);
		/*
		CFile file;
		if ( file.Open( _T("e:\\gif.gif"),CFile::modeWrite|CFile::modeCreate) )
		{
			file.Write( pGifData , pGif->lLen );
			file.Close();
		}
		*/

		if ( m_B_Gif.Load2((BYTE*)pHead->pFrame+sizeof(ANS_Other_Gif_Data),pGif->lLen) )
		{
			m_B_Gif.Draw();
			m_B_Gif.ShowWindow(SW_SHOW);
		}
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_OTHERGIF)
	{
		ANS_Other_Gif *  pGif =(ANS_Other_Gif*)pHead->pFrame;
		if ( pGif->bOK )
		{
			MessageBox( _T("�޸Ŀͻ���banner�ɹ���"),_T("��Ϣ"),MB_ICONINFORMATION);
		}
		else
		{
			MessageBox( _T("�޸Ŀͻ���bannerʧ�ܣ�"),_T("����"),MB_ICONWARNING);
		}
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_OTHEROVER_SEE)
	{
		ANS_Other_Over_Data *  pOver =(ANS_Other_Over_Data*)pHead->pFrame;

		UpdateData(true);

		m_bOverFilt = pOver->bFilt;
		m_lOverBegin= pOver->lBegin;
		m_lOverEnd  = pOver->lEnd;
		m_lOverPercent=(pOver->lPercent-1);

		UpdateData(false);

		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_OTHEROVER)
	{
		ANS_Other_Over *  pOver =(ANS_Other_Over*)pHead->pFrame;
		if ( pOver->bOK )
		{
			MessageBox( _T("�޸Ķ�����������ɹ���"),_T("��Ϣ"),MB_ICONINFORMATION);
		}
		else
		{
			MessageBox( _T("�޸Ķ����������ʧ�ܣ�"),_T("����"),MB_ICONWARNING);
		}
		return true;
	}

	return false;
}

void COtherDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialog::OnSize(nType, cx, cy);
	
	if ( m_bInit )
	{
		//CRect rect;
		//m_S_S1.GetWindowRect(&rect);
		//m_wndList.MoveWindow( 0 , 0+rect.Height()+5 , cx,cy-rect.Height()-5);
	}	
}

BOOL COtherDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//ȡ�ù��ò���
	//CMainFrame * pFrame = static_cast <CMainFrame *>((CMainFrame *)AfxGetMainWnd());
	this->GetParent()->GetParentFrame();
	m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame();
	m_pSocket    = &m_pMainFrame->m_Socket;



	//Ĭ��ȡǰ7�������
	m_tEnd = COleDateTime::GetCurrentTime();
	COleDateTimeSpan tSpan(7,0,0,0);
	m_tBegin=m_tEnd - tSpan;
	
	//��ʼ��List
	m_Image.Create(16,16,ILC_COLOR16|ILC_MASK,5,5);
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_CORP) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("���,50;  �� ��,100;  ��  ��,100;"));
	m_wndList.SetGridLines(true);
	m_wndList.SetImageList(&m_Image,LVSIL_SMALL);

	m_lVerSel = 0;  //Ĭ��Ϊ��ҵ��
	UpdateData(false);	

	m_bInit = true;

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void COtherDlg::Close()
{
	//������������
	while (!m_Corp.IsEmpty())
	{
		ANS_Corp_NameData * pData = m_Corp.GetHead();
		m_Corp.RemoveHead();
		delete pData;
	}
}

void COtherDlg::OnOtherQuery() 
{
	if ( !UpdateData(true) )
		return ;

	if ( m_tEnd < m_tBegin )
	{
		MessageBox( _T("��ѯ�������ڲ���С����ʼ���ڣ������!") , _T("����") , MB_ICONWARNING );
		return ;
	}
	REQ_Succeed * pSucceed = new REQ_Succeed;memset(pSucceed,0,sizeof(REQ_Succeed));

	if ( m_lCorp == 0 )  //ѡ��������ҵ
	{
		pSucceed->lCorpID = -1;
	}
	else
	{
		POSITION pos = (POSITION)m_L_Corp.GetItemData(m_lCorp);
		POSITION pos2 = pos;
		ANS_Corp_NameData * pData = m_Corp.GetNext( pos );
		if (pData)
		{
			pSucceed->lCorpID = pData->lCorpID;
		}
		else
		{
			return;
		}
	}
	m_tBegin.GetAsSystemTime( pSucceed->tBegin );
	m_tEnd.GetAsSystemTime( pSucceed->tEnd );
	pSucceed->bOld = m_bOld;            //�Ƿ��ѯ������
	m_pMainFrame->SendFrame(SMSFUNC_SUCCEED,(BYTE*)pSucceed,sizeof(REQ_Succeed));
	return ;	
}

void COtherDlg::OnOtherQuery2() 
{
	REQ_SmsLog * pSmsLog = new REQ_SmsLog;memset(pSmsLog,0,sizeof(REQ_SmsLog));
	m_pMainFrame->SendFrame(SMSFUNC_SMSLOG,(BYTE*)pSmsLog,sizeof(REQ_SmsLog));
	return ;		
}

void COtherDlg::OnCorpLxrAdd() 
{
	DLG_Other_Add dlg(this);
	if ( dlg.DoModal()==IDOK )
	{
		REQ_ReportNum_Add * pAdd = new REQ_ReportNum_Add;
		memset(pAdd,0,sizeof(REQ_ReportNum_Add));
		pAdd->bEnable = true;
		_tcscpy(pAdd->szName   , dlg.m_strName );
		_tcscpy(pAdd->szMobile , dlg.m_strMobile );
		m_pMainFrame->SendFrame(SMSFUNC_REPORTNUM_ADD,(BYTE*)pAdd,sizeof(REQ_ReportNum_Add));
	}
}

void COtherDlg::OnCorpLxrModify() 
{
	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	CString strName;
	CString strMobile;
	strName = m_wndList.GetItemText(lItem,1);
	strMobile = m_wndList.GetItemText(lItem,2);
	
	DLG_Other_Add dlg(this);
	dlg.SetParam(strName,strMobile);
	if ( dlg.DoModal()==IDOK )
	{
		REQ_ReportNum_Modify * pModify = new REQ_ReportNum_Modify;
		memset(pModify,0,sizeof(REQ_ReportNum_Modify));
		pModify->lID     = m_wndList.GetItemData(lItem);
		pModify->lItemID = lItem;
		pModify->bEnable = true;
		_tcscpy(pModify->szName   , dlg.m_strName );
		_tcscpy(pModify->szMobile , dlg.m_strMobile );
		m_pMainFrame->SendFrame(SMSFUNC_REPORTNUM_MODIFY,(BYTE*)pModify,sizeof(REQ_ReportNum_Modify));
	}
}

void COtherDlg::OnOtherNumDel() 
{
	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	REQ_ReportNum_Del * pDel = new REQ_ReportNum_Del;
	memset(pDel,0,sizeof(REQ_ReportNum_Del));
	pDel->lID     = m_wndList.GetItemData(lItem);
	pDel->lItemID = lItem;
	m_pMainFrame->SendFrame(SMSFUNC_REPORTNUM_DEL,(BYTE*)pDel,sizeof(REQ_ReportNum_Del));
}

void COtherDlg::OnDblclkOtherList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	OnCorpLxrModify();
}

void COtherDlg::OnOtherText() 
{
	if ( !UpdateData(true) )
		return ;
	REQ_Other_Text * pText = new REQ_Other_Text;
	memset(pText,0,sizeof(REQ_Other_Text));
	_tcscpy(pText->szText , m_strGDText );
	_tcscpy(pText->szHTML , m_strHTML );
	pText->lVerSel = m_lVerSel;
	m_pMainFrame->SendFrame(SMSFUNC_OTHERTEXT,(BYTE*)pText,sizeof(REQ_Other_Text));
}

void COtherDlg::OnOtherGif() 
{
	static TCHAR BASED_CODE szFilter[] = _T("GIF Files (*.gif)|*.gif|All Files (*.*)|*.*||");
	CFileDialog dlg(TRUE,_T("GIF"),NULL,  OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
	if (dlg.DoModal() != IDOK)
		return ;
	CString strGIF = dlg.GetPathName();

	if ( m_B_Gif.Load(strGIF) )
	{
		m_B_Gif.Draw();
		m_B_Gif.ShowWindow(SW_SHOW);

		CFile file;
		if ( !file.Open( strGIF , CFile::modeRead ) )
		{
			MessageBox( _T("���ļ��������飡") , _T("����") , MB_ICONWARNING );
			return ;
		}
		long lSize = sizeof(REQ_Other_Gif) + file.GetLength();
		BYTE * pData = new BYTE[lSize];
		memset(pData,0,lSize);
		REQ_Other_Gif * pGif = (REQ_Other_Gif *)pData;
		BYTE * pGifData = pData+sizeof(REQ_Other_Gif);
		pGif->lVerSel = m_lVerSel;
		pGif->lLen = file.GetLength();
		file.Read(pGifData,pGif->lLen);
		file.Close();
		m_pMainFrame->SendFrame(SMSFUNC_OTHERGIF,(BYTE*)pData,lSize);
	}
	else
	{
		MessageBox( _T("ѡ����ļ�������ʽ�������飡"),_T("����"),MB_ICONWARNING );
	}

}

void COtherDlg::OnOtherRefresh() 
{
	this->RefreshInfo();
}

void COtherDlg::OnOverSetup() 
{
	if ( !UpdateData(true) )
		return ;
	if ( m_lOverEnd < m_lOverBegin )
	{
		MessageBox( _T("ȫ���յ㲻��С�����!"),_T("����"),MB_ICONWARNING );
		return;
	}
	ANS_Other_Over_Data * pOver = new ANS_Other_Over_Data;
	memset(pOver,0,sizeof(ANS_Other_Over_Data));
	pOver->bFilt = m_bOverFilt;
	pOver->lBegin= m_lOverBegin;
	pOver->lEnd  = m_lOverEnd;
	pOver->lPercent=(m_lOverPercent+1);

	m_pMainFrame->SendFrame(SMSFUNC_OTHEROVER,(BYTE*)pOver,sizeof(ANS_Other_Over_Data));
}