//
//	Set default variables
//
PLUGIN_EXPORT void PluginSetDefaultVars()
{
//	PC_SetPluginVar(m_dwPluginID, OVR_VAR_POSITION_X, (int)0);
//	PC_SetPluginVar(m_dwPluginID, OVR_VAR_POSITION_Y, (int)0);
//	PC_SetPluginVar(m_dwPluginID, OVR_VAR_SIZE_X, (int)100);
//	PC_SetPluginVar(m_dwPluginID, OVR_VAR_SIZE_Y, (int)50);

	PC_SetPluginVar(m_dwPluginID, VAR_NORMAL_COLOR, RGB(255, 255, 0));
	PC_SetPluginVar(m_dwPluginID, VAR_RECORD_COLOR, RGB(255, 0, 0));
	PC_SetPluginVar(m_dwPluginID, VAR_SHOW_WHEN_NOT_RECORDING, 1);
}
//
//	Set default variables
//
PLUGIN_EXPORT void PluginSetDefaultVars()
{
    PC_SetPluginVar(m_dwPluginID, VAR_TEXT_COLOR, RGB(255, 255, 255));
    PC_SetPluginVar(m_dwPluginID, VAR_BACKGROUND_COLOR, 0);
    PC_SetPluginVar(m_dwPluginID, VAR_TEXT_FONT_FAMILY, L"Consolas");
    PC_SetPluginVar(m_dwPluginID, VAR_TEXT_FONT_SIZE, 24);
    PC_SetPluginVar(m_dwPluginID, VAR_TEXT_FONT_STYLE, (int)0);	// flags: 1 - bold, 2 - italic
    PC_SetPluginVar(m_dwPluginID, VAR_SHOW_BACKGROUND, 1);
    PC_SetPluginVar(m_dwPluginID, VAR_TEXT_FILE, L"");

}
static INT_PTR CALLBACK DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	DWORD id;
//	NMHDR *p;


	switch (uMsg)
	{
	case WM_COMMAND:
		id = LOWORD(wParam);
		if (id == IDOK || id == IDCANCEL)
		{
			if (id == IDOK)
			{
				PC_SetPluginVar(m_dwPluginID, VAR_NORMAL_COLOR, dwNormalColor);
				PC_SetPluginVar(m_dwPluginID, VAR_RECORD_COLOR, dwRecordColor);

				PC_SetPluginVar(m_dwPluginID, VAR_SHOW_WHEN_NOT_RECORDING, Button_GetCheck(GetDlgItem(hwnd, IDC_SHOW_WHEN_NOT_RECORDING)) == BST_CHECKED);
				int style = (bBold ? 1 : 0) | (bItalic ? 2 : 0);
			}

			EndDialog(hwnd, id);
		}

		if (id == IDC_NORMAL_COLOR_BTN || id == IDC_RECORD_COLOR_BTN)
		{
			DWORD &color_var = (id == IDC_NORMAL_COLOR_BTN) ? dwNormalColor : dwRecordColor;
			COLORREF custColors[16];
			CHOOSECOLOR cc = { 0 };
			cc.lStructSize = sizeof(cc);
			cc.hwndOwner = hwnd;
			cc.rgbResult = color_var;
			cc.Flags = CC_FULLOPEN | CC_RGBINIT;
			cc.lpCustColors = custColors;
			if (ChooseColor(&cc))
			{
				color_var = cc.rgbResult;
				InvalidateRect(hwnd, 0, 0);
			}
		}
		break;

	case WM_NOTIFY:
		break;

	case WM_DRAWITEM:
	{
		auto lpDIS = (LPDRAWITEMSTRUCT)lParam;
		if (lpDIS->CtlID == IDC_NORMAL_COLOR_BTN)
			DrawColorButton(lpDIS, dwNormalColor);
		if (lpDIS->CtlID == IDC_RECORD_COLOR_BTN)
			DrawColorButton(lpDIS, dwRecordColor);
		break;
	}


	case WM_INITDIALOG:
		InitSettingsDialog(hwnd);
		return true;
	}

	return false;
}
static INT_PTR CALLBACK DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    DWORD id;
    //	NMHDR *p;


    switch (uMsg)
    {
    case WM_COMMAND:
        id = LOWORD(wParam);
        if (id == IDOK || id == IDCANCEL)
        {
            if (id == IDOK)
            {
                PC_SetPluginVar(m_dwPluginID, VAR_TEXT_COLOR, dwTextColor);
                PC_SetPluginVar(m_dwPluginID, VAR_BACKGROUND_COLOR, dwBackgroundColor);
                PC_SetPluginVar(m_dwPluginID, VAR_TEXT_FILE, szFileName.c_str());
                PC_SetPluginVar(m_dwPluginID, VAR_TEXT_FONT_FAMILY, szFontFamily.c_str());
                PC_SetPluginVar(m_dwPluginID, VAR_TEXT_FILE, szFileName.c_str());
                PC_SetPluginVar(m_dwPluginID, VAR_TEXT_FONT_SIZE, dwFontSize);
                PC_SetPluginVar(m_dwPluginID, VAR_SHOW_BACKGROUND, Button_GetCheck(GetDlgItem(hwnd, IDC_SHOW_BACKGROUND)) == BST_CHECKED);
                int style = (bBold ? 1 : 0) | (bItalic ? 2 : 0);
                PC_SetPluginVar(m_dwPluginID, VAR_TEXT_FONT_STYLE, style);
            }

            EndDialog(hwnd, id);
        }

        if (id == IDC_TEXT_COLOR_BTN || id == IDC_BACKGROUND_COLOR_BTN)
        {
            DWORD &color_var = (id == IDC_TEXT_COLOR_BTN) ? dwTextColor : dwBackgroundColor;
            COLORREF custColors[16];
            CHOOSECOLOR cc = { 0 };
            cc.lStructSize = sizeof(cc);
            cc.hwndOwner = hwnd;
            cc.rgbResult = color_var;
            cc.Flags = CC_FULLOPEN | CC_RGBINIT;
            cc.lpCustColors = custColors;
            if (ChooseColor(&cc))
            {
                color_var = cc.rgbResult;
                InvalidateRect(hwnd, 0, 0);
            }
        }

        if (id == IDC_TEXT_FONT)
        {
            LOGFONT lf = { 0 };
            lf.lfItalic = bItalic;
            wcscpy_s(lf.lfFaceName, szFontFamily.c_str());
            HDC dc = GetDC(hwnd);
            lf.lfHeight = -MulDiv(dwFontSize, GetDeviceCaps(dc, LOGPIXELSY), 72);
            lf.lfWeight = 400;

            CHOOSEFONT cf = { 0 };
            cf.lStructSize = sizeof(cf);
            cf.hwndOwner = hwnd;
            cf.lpLogFont = &lf;
            cf.iPointSize = dwFontSize * 10;
            cf.Flags = CF_FORCEFONTEXIST | CF_INITTOLOGFONTSTRUCT | CF_NOSCRIPTSEL;
            if (ChooseFont(&cf))
            {
                bItalic = lf.lfItalic != 0;
                bBold = lf.lfWeight > 500;
                szFontFamily = lf.lfFaceName;
                dwFontSize = (-lf.lfHeight * 72) / GetDeviceCaps(dc, LOGPIXELSY);
                SetFontButtonText(hwnd);
            }
            ReleaseDC(hwnd, dc);

        }
        if (id == IDC_TEXT_FILE) {
            HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |
                                        COINIT_DISABLE_OLE1DDE);
            if (SUCCEEDED(hr))
            {
                IFileOpenDialog *pFileOpen;
                COMDLG_FILTERSPEC rgSpec[] =
                {
                    { L"Text Files", L"*.txt" },
                    { L"All Files", L"*.*" },
                };
                // Create the FileOpenDialog object.
                hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL,
                                      IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));

                if (SUCCEEDED(hr))
                {
                    // Show the Open dialog box.
                    pFileOpen->SetFileTypes(2, rgSpec);

                    hr = pFileOpen->Show(NULL);

                    // Get the file name from the dialog box.
                    if (SUCCEEDED(hr))
                    {
                        IShellItem *pItem;
                        hr = pFileOpen->GetResult(&pItem);
                        if (SUCCEEDED(hr))
                        {
                            PWSTR pszFilePath;
                            hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);

                            // Display the file name to the user.
                            if (SUCCEEDED(hr))
                            {
                                //MessageBox(NULL, pszFilePath, L"File Path", MB_OK);
                                //szFileName = L"CATS";
                                szFileName = pszFilePath;
                                SetFileNameButtonText(hwnd);
                                CoTaskMemFree(pszFilePath);
                            }
                            pItem->Release();
                        }
                    }
                    pFileOpen->Release();
                }
                CoUninitialize();
            }

        }

        break;

    case WM_NOTIFY:
        break;

    case WM_DRAWITEM:
    {
        auto lpDIS = (LPDRAWITEMSTRUCT)lParam;
        if (lpDIS->CtlID == IDC_TEXT_COLOR_BTN)
            DrawColorButton(lpDIS, dwTextColor);
        if (lpDIS->CtlID == IDC_BACKGROUND_COLOR_BTN)
            DrawColorButton(lpDIS, dwBackgroundColor);
        break;
    }


    case WM_INITDIALOG:
        InitSettingsDialog(hwnd);
        return true;
    }

    return false;
}