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

static const wchar_t SEC_GENERAL[] = L"General";
static const wchar_t KEY_RHYTHM[] = L"Rhythm";
static const wchar_t KEY_ENABLE_VGM[] = L"EnableVGM";
static const wchar_t KEY_ENABLE_S98[] = L"EnableS98";

static const bool    ENABLE_S98_DEFAULT = 1;        
static const wchar_t SZ_ENABLE_S98_DEFAULT[] = L"1";
static const bool    ENABLE_VGM_DEFAULT = 0;
static const wchar_t SZ_ENABLE_VGM_DEFAULT[] = L"0";

extern HINSTANCE g_hKpi;
/////////////////////////////////////////////////////////////////////////////
BOOL __fastcall kbs98_EnumConfig(IKpiConfigEnumerator *pEnumerator)
{
    static const KPI_CFG_SECTION sec[] = {
        {SEC_GENERAL, NULL, L"kbs98.kpi に関する一般的な設定です。"},
        {NULL, NULL, NULL}
    };
    static const KPI_CFG_KEY key[] = {
        {KPI_CFG_TYPE_FOLDER, SEC_GENERAL, KEY_RHYTHM, L"リズム音源のパス", 
            NULL, NULL, NULL, //default/min/max
            NULL, NULL, //list/listdesc
            L"リズム音源の WAVE データの検索パスを指定します。\r\n"
            L"未指定の場合はプラグインと同じフォルダから検索します。\r\n"
            L"\r\n"
            L"以下の WAVE ファイルが置いてあるパスを指定します。\r\n"
            L"・2608_BD.WAV\r\n"
            L"・2608_HH.WAV\r\n"
            L"・2608_RIM.WAV\r\n"
            L"・2608_SD.WAV\r\n"
            L"・2608_TOM.WAV\r\n"
            L"・2608_TOP.WAV"},//help
        {KPI_CFG_TYPE_BOOL, SEC_GENERAL, KEY_ENABLE_S98, NULL,
            SZ_ENABLE_S98_DEFAULT, NULL, NULL, //default/min/max
            NULL, NULL, //list/listdesc
            L"本プラグインで S98 を再生したい場合は true にします。\r\n"
            L"使用優先度が他の S98 対応プラグインより低い場合はそちらの\r\n"
            L"プラグインを無効化する必要があります。\r\n"
            L"\r\n"
            L"本プラグインのエミュレーションコアは古いため、本体同梱の\r\n"
            L"kbvgm.kpi の使用をお勧めします。\r\n"
            L""},//help
        {KPI_CFG_TYPE_BOOL, SEC_GENERAL, KEY_ENABLE_VGM, NULL,
            SZ_ENABLE_VGM_DEFAULT, NULL, NULL, //default/min/max
            NULL, NULL, //list/listdesc
            L"本プラグインで VGM を再生したい場合は true にします。\r\n"
            L"使用優先度が他の VGM 対応プラグインより低い場合はそちらの\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 kbs98_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 kbs98_GetSettings(IKpiConfig *pConfig, kbs98_Settings *pSettings)
{
    pConfig->GetStr(SEC_GENERAL, KEY_RHYTHM, 
                    pSettings->szRhythmPath, sizeof(pSettings->szRhythmPath), L"");
    if(!pSettings->szRhythmPath[0]){
        GetModuleFileName(g_hKpi, pSettings->szRhythmPath, _countof(pSettings->szRhythmPath));
        wchar_t *path_delimiter = wcsrchr(pSettings->szRhythmPath, L'\\');
        if(path_delimiter){
            path_delimiter[1] = 0;
        }
    }
    else{
        wchar_t *path_delimiter = wcsrchr(pSettings->szRhythmPath, L'\\');
        if(path_delimiter && *path_delimiter != L'\\'){
            wcsncat_s(pSettings->szRhythmPath, L"\\", _TRUNCATE);
        }
    }
    pSettings->bEnableS98 = pConfig->GetInt(SEC_GENERAL, KEY_ENABLE_S98, ENABLE_S98_DEFAULT) != 0;
    pSettings->bEnableVGM = pConfig->GetInt(SEC_GENERAL, KEY_ENABLE_VGM, ENABLE_VGM_DEFAULT) != 0;

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