#include <Windows.h>
#include "kbqt_config.h"
#include "kpi.h"

static const wchar_t SEC_GENERAL[] = L"General";
static const wchar_t KEY_QT_CTRLPANEL[] = L"QT_CtrlPanel";

static const wchar_t KEY_DISABLE_QT[] = L"DisableQT";
static const bool    DISABLE_QT_DEFAULT = false;
static const wchar_t SZ_DISABLE_QT_DEFAULT[] = L"0";

//////////////////////////////////////////////////////////////////////////////
BOOL __fastcall kbqt_EnumConfig(IKpiConfig* pConfig, IKpiConfigEnumerator* pEnumerator)
{
    KPI_CFG_KEY key[] = {
    //   type, section, key, keydesc, default, min, max, list, listdesc, help
        { KPI_CFG_TYPE_BOOL, SEC_GENERAL, KEY_DISABLE_QT, L"QuickTime無効化",
            SZ_DISABLE_QT_DEFAULT, NULL, NULL, //default, min, max
            NULL, //list
            NULL, //listdesc
            L"true にすると QuickTime 関係の拡張子(.qt/.mov)を対応拡張子から外します。\r\n"
            L"true にすると本プラグインは .mid しか再生出来なくなります。\r\n"
            L"\r\n"
            L"kbdshow.kpi と kbmov.kpi にも同じ設定があります。\r\n"
            L"各プラグインの設定を確認して QuickTime 形式をどのプラグインで\r\n"
            L"再生するか決めて下さい。\r\n"
            L""
        },//help
        {KPI_CFG_TYPE_BIN, SEC_GENERAL, KEY_QT_CTRLPANEL, L"QuickTime設定", 
            NULL, NULL, NULL, //default, min, max
            NULL, //list
            NULL, //listdesc
            L"QuickTime の設定画面を開きます。設定の管理は QuickTime が独自に行っているため、"
            L"「既定値に戻す」は適用されません。kbqt.kpi を使用するためには QuickTime の"
            L"インストールが必要です。設定画面が開かない場合は QuickTime がインストールされて\r\n"
            L"いない可能性があります。\r\n"
            L"\r\n"
            L"「オーディオ」タブの「ミュージックシンセ」は kbqt.kpi を用いて MIDI を再生したときの"
            L"音質に関係します。通常は「QuickTime ミュージックシンセ」を選択します。\r\n"
            L"それ以外の設定も QuickTime 形式の再生品質に影響します。"
            },//help
        {0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
    };
    for(int i = 0; key[i].cszSection; i++){
        pEnumerator->EnumKey(&key[i]);
    }
    return TRUE;
}
//////////////////////////////////////////////////////////////////////////////
DWORD __fastcall kbqt_ApplyConfig(IKpiConfig* pConfig,
    const wchar_t* cszSection, //セクション名
    const wchar_t* cszKey, //キー名
    INT64  nValue, //変更後の値(BOOL/INT の場合)
    double dValue, //変更後の値(FLOAT の場合)
    const wchar_t* cszValue)//変更後の値(文字列)
{
    if(wcscmp(cszSection, SEC_GENERAL) == 0){
       if(wcscmp(cszKey, KEY_QT_CTRLPANEL) == 0){
            ShellExecute(NULL, L"open", L"control.exe", 
                L"QuickTime.cpl", NULL, SW_SHOWNA);
            return KPI_CFGRET_OK;
        }
        else if(wcscmp(cszKey, KEY_DISABLE_QT) == 0){
            pConfig->SetStr(cszSection, cszKey, cszValue);
            return KPI_CFGRET_RELOAD_KPI;
        }
    }
    return KPI_CFGRET_OK;

}
//////////////////////////////////////////////////////////////////////////////
/*
void __fastcall kbqt_GetSettings(IKpiConfig* pConfig, KbQt_Settings* pSettings)
{
    pSettings->bDisableQT = pConfig->GetInt(SEC_GENERAL, KEY_DISABLE_QT, DISABLE_QT_DEFAULT) != 0;
}
*/
//////////////////////////////////////////////////////////////////////////////
const wchar_t* __fastcall kbqt_GetSupportExts(IKpiConfig* pConfig)
{//対応拡張子を取得
    static const wchar_t cszExts_mid_qt[] = L".mov/.qt/.mid";
    static const wchar_t cszExts_mid[] = L".mid";
    bool bDisableQT = pConfig->GetInt(SEC_GENERAL, KEY_DISABLE_QT, DISABLE_QT_DEFAULT) != 0;
    if(bDisableQT){
        return cszExts_mid;
    }
    else{
        return cszExts_mid_qt;
    }

}
//////////////////////////////////////////////////////////////////////////////
