#include <windows.h>
#include "kbgym_config.h"

static const wchar_t SEC_GENERAL[] = L"General";
static const wchar_t KEY_ENABLE_GYM[] = L"EnableGYM";

static const bool    ENABLE_GYM_DEFAULT = 1;
static const wchar_t SZ_ENABLE_GYM_DEFAULT[] = L"1";

/////////////////////////////////////////////////////////////////////////////
BOOL __fastcall kbgym_EnumConfig(IKpiConfigEnumerator* pEnumerator)
{
    static const KPI_CFG_SECTION sec[] = {
        {SEC_GENERAL, NULL, L"kbgym.kpi に関する一般的な設定です。"},
        {NULL, NULL, NULL}
    };
    static const KPI_CFG_KEY key[] = {
        {KPI_CFG_TYPE_BOOL, SEC_GENERAL, KEY_ENABLE_GYM, NULL,
            SZ_ENABLE_GYM_DEFAULT, NULL, NULL, //default/min/max
            NULL, NULL, //list/listdesc
            L"本プラグインで GYM を再生したい場合は true にします。\r\n"
            L"使用優先度が他の GYM 対応プラグインより低い場合はそちらの\r\n"
            L"プラグインを無効化する必要があります。\r\n"
            L"\r\n"
            L"本プラグインのエミュレーションコアは古いため、本体同梱の\r\n"
            L"kbvgm.kpi の使用をお勧めします。\r\n"
            L""},//help
       {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
    };
    for (int i = 0; sec[i].cszSection; i++) {
        pEnumerator->EnumSection(&sec[i]);
    }
    for (int i = 0; key[i].cszSection; i++) {
        pEnumerator->EnumKey(&key[i]);
    }
    return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
DWORD __fastcall kbgym_ApplyConfig(IKpiConfig* pConfig,
    const wchar_t* cszSection,//セクション名
    const wchar_t* cszKey,    //キー名
    INT64  nValue, //変更後の値(BOOL/INT の場合)
    double dValue, //変更後の値(FLOAT の場合)
    const wchar_t* cszValue)////変更後の値(文字列)
{
    pConfig->SetStr(cszSection, cszKey, cszValue);
    return KPI_CFGRET_RELOAD_KPI;
}
/////////////////////////////////////////////////////////////////////////////
void __fastcall kbgym_GetSettings(IKpiConfig* pConfig, kbgym_Settings* pSettings)
{
    pSettings->bEnableGYM = pConfig->GetInt(SEC_GENERAL, KEY_ENABLE_GYM, ENABLE_GYM_DEFAULT) != 0;
}
/////////////////////////////////////////////////////////////////////////////
