#include "Mra.h"
#include "MraSelectEMail.h"
#include "BuffToLowerCase.h"



struct MraSelectEMailDlgData
{
	HANDLE hContact;
	DWORD dwType;
};




void AddContactEMailToListParam(HANDLE hContact,BOOL bMRAOnly,LPSTR lpszModule,LPSTR lpszValueName,HWND hWndList)
{
	CHAR szBuff[MAX_PATH],szEMail[MAX_EMAIL_LEN];
	WCHAR wszBuff[MAX_PATH];
	SIZE_T i,dwEMailSize;

	if(DB_GetStaticStringA(hContact,lpszModule,lpszValueName,szEMail,SIZEOF(szEMail),&dwEMailSize))
	{
		if (bMRAOnly==FALSE || IsEMailMR(szEMail,dwEMailSize))
		{
			MultiByteToWideChar(MRA_CODE_PAGE,0,szEMail,(dwEMailSize+1),wszBuff,SIZEOF(wszBuff));
			if (SendMessage(hWndList,LB_FINDSTRING,-1,(LPARAM)wszBuff)==LB_ERR) SendMessage(hWndList,LB_ADDSTRING,0,(LPARAM)wszBuff);
		}
	}

	for (i=0;TRUE;i++)
	{
		mir_snprintf(szBuff,SIZEOF(szBuff),"%s%lu",lpszValueName,i);
		if(DB_GetStaticStringA(hContact,lpszModule,szBuff,szEMail,SIZEOF(szEMail),&dwEMailSize))
		{
			if (bMRAOnly==FALSE || IsEMailMR(szEMail,dwEMailSize))
			{
				MultiByteToWideChar(MRA_CODE_PAGE,0,szEMail,(dwEMailSize+1),wszBuff,SIZEOF(wszBuff));
				if (SendMessage(hWndList,LB_FINDSTRING,-1,(LPARAM)wszBuff)==LB_ERR) SendMessage(hWndList,LB_ADDSTRING,0,(LPARAM)wszBuff);
			}
		}else{
			if (i>EMAILS_MIN_COUNT) break;
		}
	}
}


INT_PTR CALLBACK MraSelectEMailDlgProc(HWND hWndDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
	MraSelectEMailDlgData *pmrasemddDlgData=(MraSelectEMailDlgData*)GetWindowLongPtr(hWndDlg,GWLP_USERDATA);

	if (pmrasemddDlgData)
	{
		switch(message){
		case WM_CLOSE:
			DestroyWindow(hWndDlg);
			break;
		case WM_DESTROY:
			SetWindowLongPtr(hWndDlg,GWLP_USERDATA,(LONG_PTR)0);
			MEMFREE(pmrasemddDlgData);
			EndDialog(hWndDlg,NO_ERROR);
			break;
		case WM_COMMAND:
			switch(LOWORD(wParam)){
			case IDC_LIST_EMAILS:
				if (HIWORD(wParam)==LBN_DBLCLK)
				{
					//switch(pmrasemddDlgData->dwType){
					//case MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD:
					//	break;
					//case MRA_SELECT_EMAIL_TYPE_VIEW_ALBUM:
					//case MRA_SELECT_EMAIL_TYPE_READ_BLOG:
						SendMessage(hWndDlg,WM_COMMAND,MAKEWPARAM(IDOK,BN_CLICKED),(LPARAM)GetDlgItem(hWndDlg,IDOK));
					//	break;
					//}
				}
				break;
			case IDOK:
				{
					CHAR szEMail[MAX_EMAIL_LEN];
					WCHAR wszBuff[MAX_PATH];
					SIZE_T dwEMailSize;

					dwEMailSize=SendMessage(GetDlgItem(hWndDlg,IDC_LIST_EMAILS),LB_GETTEXT,SendMessage(GetDlgItem(hWndDlg,IDC_LIST_EMAILS),LB_GETCURSEL,0,0),(LPARAM)wszBuff);  
					WideCharToMultiByte(MRA_CODE_PAGE,0,wszBuff,(dwEMailSize+1),szEMail,SIZEOF(szEMail),NULL,NULL);
					BuffToLowerCase(szEMail,szEMail,dwEMailSize);
					
					switch(pmrasemddDlgData->dwType){
					case MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD:
						{
							SIZE_T dwUrlSize;
							CHAR szUrl[BUFF_SIZE_URL];
							dwUrlSize=mir_snprintf(szUrl,SIZEOF(szUrl),"http://cards.mail.ru/event.html?rcptname=%s&rcptemail=%s",GetContactNameA(pmrasemddDlgData->hContact),szEMail);
							MraMPopSessionQueueAddUrl(masMraSettings.hMPopSessionQueue,szUrl,dwUrlSize);
						}
						break;
					case MRA_SELECT_EMAIL_TYPE_VIEW_ALBUM:
						MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_FOTO_URL,sizeof(MRA_FOTO_URL),szEMail,dwEMailSize);
						break;
					case MRA_SELECT_EMAIL_TYPE_READ_BLOG:
						MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_BLOGS_URL,sizeof(MRA_BLOGS_URL),szEMail,dwEMailSize);
						break;
					case MRA_SELECT_EMAIL_TYPE_VIEW_VIDEO:
						MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_VIDEO_URL,sizeof(MRA_VIDEO_URL),szEMail,dwEMailSize);
						break;
					case MRA_SELECT_EMAIL_TYPE_ANSWERS:
						MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_ANSWERS_URL,sizeof(MRA_ANSWERS_URL),szEMail,dwEMailSize);
						break;
					case MRA_SELECT_EMAIL_TYPE_WORLD:
						MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_WORLD_URL,sizeof(MRA_WORLD_URL),szEMail,dwEMailSize);
						break;
					}
				}
				//break;
			case IDCANCEL:
				DestroyWindow(hWndDlg);
				break;
			default:
				break;
			}
			break;
		default:
			break;
		}
	}else{
		pmrasemddDlgData=(MraSelectEMailDlgData*)lParam;

		if (message==WM_INITDIALOG)
		{
			HWND hWndList;
			BOOL bMRAOnly;
			LPSTR lpszProto;

			SetWindowLongPtr(hWndDlg,GWLP_USERDATA,(LONG_PTR)lParam);
			hWndList=GetDlgItem(hWndDlg,IDC_LIST_EMAILS);
			//SendMessage(hWndList,CB_RESETCONTENT,0,0);

			switch(pmrasemddDlgData->dwType){
			case MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD:
			//	SetWindowLongPtr(hWndList,GWL_STYLE,(GetWindowLongPtr(hWndList,GWL_STYLE)|LBS_MULTIPLESEL));
			//	SetWindowLongPtr(hWndList,GWL_STYLE,(GetWindowLongPtr(hWndList,GWL_STYLE)&~LBS_SORT));
				bMRAOnly=FALSE;
				break;
			case MRA_SELECT_EMAIL_TYPE_VIEW_ALBUM:
			case MRA_SELECT_EMAIL_TYPE_READ_BLOG:
			//	SetWindowLongPtr(hWndList,GWL_STYLE,(LONG)(GetWindowLong(hWndList,GWL_STYLE)|LBS_NOSEL));
				bMRAOnly=TRUE;
				break;
			default:
				bMRAOnly=FALSE;
				break;
			}

			if (pmrasemddDlgData->hContact)
			{
				lpszProto=(LPSTR)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)pmrasemddDlgData->hContact,0);
			}else{
				lpszProto=PROTOCOL_NAMEA;
			}
			AddContactEMailToListParam(pmrasemddDlgData->hContact,bMRAOnly,lpszProto,"e-mail",hWndList);
			AddContactEMailToListParam(pmrasemddDlgData->hContact,bMRAOnly,"UserInfo","e-mail",hWndList);
			AddContactEMailToListParam(pmrasemddDlgData->hContact,bMRAOnly,"UserInfo","Mye-mail",hWndList);
			AddContactEMailToListParam(pmrasemddDlgData->hContact,bMRAOnly,"UserInfo","Companye-mail",hWndList);
			AddContactEMailToListParam(pmrasemddDlgData->hContact,bMRAOnly,"UserInfo","MyCompanye-mail",hWndList);

			TranslateDialogDefault(hWndDlg);
		}

		//return(DefWindowProc(hWndDlg,message,wParam,lParam));
	}
return(FALSE);
}


DWORD MraSelectEMailDlgShow(HANDLE hContact,DWORD dwType)
{
	MraSelectEMailDlgData *pmrasemddDlgData;

	pmrasemddDlgData=(MraSelectEMailDlgData*)MEMALLOC(sizeof(MraSelectEMailDlgData));
	if (pmrasemddDlgData)
	{
		pmrasemddDlgData->hContact=hContact;
		pmrasemddDlgData->dwType=dwType;
		DialogBoxParam(masMraSettings.hInstance,MAKEINTRESOURCE(IDD_DIALOG_SELECT_EMAIL),NULL,MraSelectEMailDlgProc,(LPARAM)pmrasemddDlgData);
	}
return(0);
}