// ListDlg.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "K_MsgList.h"

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

/////////////////////////////////////////////////////////////////////////////
// CK_MsgList dialog

#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_SmsLogSee.h"
#include "DLG_HZB_Export.h"
#include "SmsManagerDoc.h"
#include "UserView.h"
#include "DLG_Corp_Oper_Open.h"

CK_MsgList::CK_MsgList(CWnd* pParent /*=NULL*/)
	: CDialog(CK_MsgList::IDD, pParent)
{
	//{{AFX_DATA_INIT(CK_MsgList)
	m_lTime = -1;
	m_lType = -1;
	//}}AFX_DATA_INIT
	m_bInit = false;
	m_bRefresh = false;
//	m_bProcess = false;
	m_lQueryCorpID = 0;
	m_lMsgCount = 0;
}


void CK_MsgList::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CK_MsgList)
	DDX_Control(pDX, IDC_LIST_CORPID, m_E_CorpID);
	DDX_Control(pDX, IDC_LIST_TYPE, m_L_Type);
	DDX_Control(pDX, IDC_LIST_TIME, m_L_Time);
	DDX_Control(pDX, IDC_LIST_S1, m_S_S1);
	DDX_Control(pDX, IDC_LIST_LIST, m_wndList);
	DDX_CBIndex(pDX, IDC_LIST_TIME, m_lTime);
	DDX_CBIndex(pDX, IDC_LIST_TYPE, m_lType);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CK_MsgList, CDialog)
	//{{AFX_MSG_MAP(CK_MsgList)
	ON_WM_SIZE()
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_LIST, OnDblclkListList)
	ON_NOTIFY(NM_RCLICK, IDC_LIST_LIST, OnRclickListList)
	ON_BN_CLICKED(IDC_LIST_QUERY, OnListQuery)
	ON_CBN_SELCHANGE(IDC_LIST_TYPE, OnSelchangeListType)
	//}}AFX_MSG_MAP
	ON_COMMAND(MENU_LIST_SEE      , On_User_See )
	ON_COMMAND(MENU_LIST_CORPLIST , On_User_CorpList )
	ON_COMMAND(MENU_LIST_CORPOFF  , On_User_CorpOFF )
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CK_MsgList message handlers

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

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

BOOL CK_MsgList::RefreshInfo()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return false;
	}
#ifndef SMSMANAGER_KF
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE) )
	{
		return false;
	}
#endif
	return true;
}

BOOL CK_MsgList::ProcessSocket(Socket_Head *pHead)
{
	//ȡ�嵥
	if (pHead->lFuncType == SMSFUNC_MSGLIST)
	{

		ANS_MsgList     * pList = (ANS_MsgList *)pHead->pFrame;
		ANS_MsgListData * pData = (ANS_MsgListData *)(pHead->pFrame+sizeof(ANS_MsgList));
		if ( pList->lType == 0 || pList->lType == 2 || pList->lType == 3)
		{
			CString strTemp;
			strTemp.Format( _T("��ѯ��� (%d/%d)") , pList->lPageCount,pList->lPageAll );
			m_S_S1.SetWindowText( strTemp );
			//���ӵ�List
			long lCount = m_wndList.GetItemCount();
			TCHAR szBuf[512]={0};
			for ( int i = 0 ; i< pList->lCount;i++)
			{
				ANS_MsgListData * pNewData = new ANS_MsgListData;
				*pNewData = *pData;
				POSITION pos = m_ListData.AddTail(pNewData);
				
				//m_wndList.SetHeadings(_T("���,40; ��ҵID,60;��������,1000;"));
				m_wndList.InsertItem( lCount+i,_itot(lCount+i+1,szBuf,10),0);
				_stprintf(szBuf , _T("%d") , pData->lCorpID );
				m_wndList.SetItemText(lCount+i,1,szBuf);
				m_wndList.SetItemText(lCount+i,2,_itot(pData->lCount,szBuf,10));
				m_wndList.SetItemText(lCount+i,3,pData->szMsg);

				m_lMsgCount += pData->lCount;
				
				m_wndList.SetItemData(lCount+i,(DWORD_PTR)(pos) );
				pData++;
			}
			if ( pList->lPageCount==pList->lPageAll )
			{
				m_wndList.InsertItem( lCount+i,_T(""),0);i++;
				m_wndList.InsertItem( lCount+i,_T("�ϼ�"),0);
				m_wndList.SetItemText(lCount+i,2,_itot(m_lMsgCount,szBuf,10));
			}

		}
		if ( pList->lType == 1 )
		{
			CString strTemp;
			strTemp.Format( _T("��ѯ��� (%d/%d)") , pList->lPageCount,pList->lPageAll );
			m_S_S1.SetWindowText( strTemp );
			//���ӵ�List
			long lCount = m_wndList.GetItemCount();
			TCHAR szBuf[512]={0};
			for ( int i = 0 ; i< pList->lCount;i++)
			{
				ANS_MsgListData * pNewData = new ANS_MsgListData;
				*pNewData = *pData;
				POSITION pos = m_ListData.AddTail(pNewData);
				
				//	m_wndList.SetHeadings(_T("���,50; ��ҵID,70;��ɧ�ż���,80,�ֻ�����,130;��������,1000;"));
				m_wndList.InsertItem( lCount+i,_itot(lCount+i+1,szBuf,10),0);
				_stprintf(szBuf , _T("%d") , pData->lCorpID );
				m_wndList.SetItemText(lCount+i,1,szBuf);
				_stprintf(szBuf, _T("%4d"), pData->lCheckResend);
				m_wndList.SetItemText(lCount+i,2, szBuf);
				m_wndList.SetItemText(lCount+i,3,pData->szMobile);
				m_wndList.SetItemText(lCount+i,4,pData->szMsg);
				
				m_wndList.SetItemData(lCount+i,(DWORD_PTR)(pos) );
				pData++;
			}
		}

		return true;
	}

	return false;
}

BOOL CK_MsgList::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;


	//��ʼ��List
	m_Image.Create(16,16,ILC_COLOR16|ILC_MASK,5,5);
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LIST) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("���,50; ��ҵID,80;����,80;��������,1000;"));
	m_wndList.SetGridLines(true);
//	m_wndList.SetImageList(&m_Image,LVSIL_SMALL);

	m_bInit = true;

	m_lType=0;
	UpdateData(false);

	OnSelchangeListType();

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

void CK_MsgList::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);
	}	
}

void CK_MsgList::Close()
{
	Close_ListData();
}

void CK_MsgList::OnListQuery() 
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}
#ifndef SMSMANAGER_KF
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE) )
	{
		return ;
	}
#endif
	UpdateData(true);

	Close_ListData();

	m_wndList.DeleteAllColumns();
	REQ_MsgList * pList = new REQ_MsgList;memset(pList,0,sizeof(REQ_MsgList));
	pList->lType = m_lType;
	if ( m_lType==0 || m_lType==3 )
	{
		m_wndList.SetHeadings(_T("���,50; ��ҵID,80;����,60;��������,1000;"));
		pList->dwMin = 30;
		switch ( m_lTime )
		{
		case 0:
			pList->dwMin = 5;
			break;
		case 1:
			pList->dwMin = 10;
			break;
		case 2:
			pList->dwMin = 20;
			break;
		case 3:
			pList->dwMin = 30;
			break;
		case 4:
			pList->dwMin = 40;
			break;
		case 5:
			pList->dwMin = 50;
			break;
		case 6:
			pList->dwMin = 60;
			break;
		case 7:
			pList->dwMin = 90;
			break;
		case 8:
			pList->dwMin = 120;
			break;
		case 9:
			pList->dwMin = 180;
			break;
		case 10:
			pList->dwMin = 300;
			break;
		case 11:
			pList->dwMin = 480;
			break;
		case 12:
			pList->dwMin = 600;
			break;
		case 13:
			pList->dwMin = 900;
			break;
		}
		this->Close_ListData();              //�ر�ԭ����
	}
	if ( m_lType==1 )
	{
		m_wndList.SetHeadings(_T("���,50; ��ҵID,80;��ɧ�ż���,100;�ֻ�����,130;��������,1000;"));

		pList->dwMin = 60;
		switch ( m_lTime )
		{
		case 0:
			 pList->dwMin = 60;
			 break;
		case 1:
			 pList->dwMin = 60*2;
			 break;
		case 2:
			 pList->dwMin = 60*5;
			 break;
		case 3:
			 pList->dwMin = -1;
			 break;
		case 4:
			 pList->dwMin = -2;
			 break;
		}
	}
	if ( m_lType==2)
	{
		CString strCorpID;
		m_E_CorpID.GetWindowText(strCorpID);

		long lCorpID = _ttol(strCorpID);
		if ( lCorpID<100000 || lCorpID>999999 )
		{
			MessageBox( _T("��ҵID�����������飡") , _T("����") , MB_ICONWARNING );
			GetDlgItem(IDC_LIST_CORPID)->SetFocus();
		}
		pList->lCorpID = lCorpID;
		m_wndList.SetHeadings(_T("���,40; ��ҵID,60;����,60;��������,1000;"));
	}

	m_lMsgCount = 0;

	m_wndList.ShowWindow( SW_HIDE ); //Ϊ�˼ӿ���ʾ�ٶ�
	m_wndList.DeleteAllItems();  //��ɾ�����м�¼
	m_pMainFrame->SendFrame(SMSFUNC_MSGLIST,(BYTE*)pList,sizeof(REQ_MsgList));
	m_wndList.ShowWindow( SW_SHOW ); //Ϊ�˼ӿ���ʾ�ٶ�
	m_S_S1.SetWindowText( _T("��ѯʱ��") );
	return ;	
}

void CK_MsgList::OnDblclkListList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	On_User_See();
}

void CK_MsgList::OnRclickListList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	ShowRMenu();
}

void CK_MsgList::ShowRMenu()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE,false) )
	{
		return ;
	}


	CMenu menu;
	menu.CreatePopupMenu();
	BOOL bLock = false;
	long lItem = this->GetCurrentSelected();
	//����
	if ( lItem>=0 )
	{
		menu.AppendMenu(MF_STRING     , MENU_LIST_SEE    , _T(" �� �� ") );
		menu.AppendMenu(MF_STRING     , MENU_LIST_CORPLIST, _T(" ��ѯ����ҵ�嵥 ") );

		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING     , MENU_LIST_CORPOFF , _T(" ���ô���ҵ ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LIST_SEE    , _T(" �� �� ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LIST_CORPLIST, _T(" ��ѯ����ҵ�嵥 ") );
		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LIST_CORPOFF , _T(" ���ô���ҵ ") );
	}
	//��ʾ�˵�
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}

long CK_MsgList::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}

void CK_MsgList::On_User_See()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}

	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_MsgListData * pData = m_ListData.GetNext( pos );
	if (!pData)
		return ;

	SMS_See sms={0};

	_stprintf( sms.szCorpID , _T("%d") , pData->lCorpID);
	if (m_lType==1)
		_stprintf(sms.szStatus, _T("%d"), pData->lCheckResend);
	_tcscpy(sms.szRecver, pData->szMobile);
	_tcscpy( sms.szMsg , pData->szMsg );

	DLG_SmsLogSee dlg(this);
	dlg.SetParam(sms);
	dlg.DoModal();
}
void CK_MsgList::Close_ListData()
{
	//������������
	while (!m_ListData.IsEmpty())
	{
		ANS_MsgListData * pData = m_ListData.GetHead();
		m_ListData.RemoveHead();
		delete pData;
	}

}

void CK_MsgList::On_User_CorpList()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}

	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_MsgListData * pData = m_ListData.GetNext( pos );
	if (!pData)
		return ;

	this->m_pMainFrame->ShowFuncDlg( FUNC_LIST );

	this->m_pMainFrame->m_pUserView->m_dlgList.m_lQueryCorpID = pData->lCorpID;
	this->m_pMainFrame->m_pUserView->m_dlgList.OnListQuery();
}

void CK_MsgList::On_User_CorpOFF()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}

	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_MsgListData * pData = m_ListData.GetNext( pos );
	if (!pData)
		return ;

	ANS_Corp_SeeData data={0};
	data.lCorpID = pData->lCorpID;
	
	DLG_Corp_Oper_Open dlg(this);
	dlg.SetParam(&data,false,this->m_pMainFrame->m_Setup.szUser);
	if ( dlg.DoModal() == IDOK )
	{
		REQ_CorpOFF * pCorp = new REQ_CorpOFF;memset(pCorp,0,sizeof(REQ_CorpOFF));
		pCorp->lCorpID = pData->lCorpID;
		pCorp->lStatus = 0;  //0Ϊ���ã�1Ϊ����
		_tcscpy(pCorp->szBZ , dlg.m_strBZ );
		_tcscpy(pCorp->szOper , dlg.m_strOperName );
		
		m_pMainFrame->SendFrame(SMSFUNC_CORPOFF,(BYTE*)pCorp,sizeof(REQ_CorpOFF));
	}
}

void CK_MsgList::OnSelchangeListType() 
{
	long lType = m_L_Type.GetCurSel();

	UpdateData(true);
	m_L_Time.ResetContent();
	switch(lType)
	{
	case 0:
	case 3:
		m_lTime = 3;
		
		m_L_Time.AddString( _T("5����") );
		m_L_Time.AddString( _T("10����") );
		m_L_Time.AddString( _T("20����") );
		m_L_Time.AddString( _T("30����") );
		m_L_Time.AddString( _T("40����") );
		m_L_Time.AddString( _T("50����") );
		m_L_Time.AddString( _T("1Сʱ") );
#ifndef SMSMANAGER_KF
		m_L_Time.AddString( _T("1.5Сʱ") );
		m_L_Time.AddString( _T("2Сʱ") );
		m_L_Time.AddString( _T("3Сʱ") );
		m_L_Time.AddString( _T("5Сʱ") );
		m_L_Time.AddString( _T("8Сʱ") );
		m_L_Time.AddString( _T("10Сʱ") );
		m_L_Time.AddString( _T("15Сʱ") );
#endif
		 break;
	case 1:
		m_lTime = 2;
		m_L_Time.AddString( _T("1Сʱ") );
		m_L_Time.AddString( _T("2Сʱ") );
		m_L_Time.AddString( _T("5Сʱ") );
		m_L_Time.AddString( _T("����") );
		m_L_Time.AddString( _T("����") );
		 break;
	default:
		 break;
	}

	UpdateData(false);
}