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

static const wchar_t SEC_GENERAL[] = L"General";
static const wchar_t KEY_PDX[] = L"PDX";
static const wchar_t KEY_SAMPLERATE[] = L"SampleRate";
static const int SAMPLERATE_DEFAULT = 44100;
static const wchar_t SZ_SAMPLERATE_DEFAULT[] = L"44100";

//static const wchar_t KEY_LPF[] = L"LPF";
/////////////////////////////////////////////////////////////////////////////
BOOL __fastcall kbmdx_EnumConfig(IKpiConfigEnumerator *pEnumerator)
{
    static const KPI_CFG_SECTION sec[] = {
        {SEC_GENERAL, NULL, L"kbmdx.kpi に関する一般的な設定です。"},
        {NULL, NULL, NULL}
    };
    static const KPI_CFG_KEY key[] = {
        {KPI_CFG_TYPE_FOLDER, SEC_GENERAL, KEY_PDX, L"PDXのパス", 
            NULL, NULL, NULL, //default/min/max
            NULL, NULL, //list/listdesc
            L"PDX の検索パスを指定します。サブフォルダは検索しません。\r\n"
            L"ここで指定しなくても曲データと同じフォルダは常に検索します。\r\n"
            L""},//help
        /*{KPI_CFG_TYPE_BOOL, SEC_GENERAL, KEY_LPF, L"ローパスフィルタ",
            L"1", NULL, NULL, //default/min/max
            NULL, //list
            NULL, //listdesc
            L"true にするとローパスフィルタを有効にします。\r\n"
            L"再生周波数が 44100 Hz または 48000 Hz のときのみ有効です。(44100/48000 以外のときは常に無効となります)"
            }, //help        
        */
        {KPI_CFG_TYPE_INT, SEC_GENERAL, KEY_SAMPLERATE, L"再生周波数",
            SZ_SAMPLERATE_DEFAULT, NULL, NULL, //default/min/max
            L"22050\t44100\t48000\t-22050\t-44100\t-48000", //list
            L"22050Hz\t44100Hz\t48000Hz\t22050Hz(要求無視)\t44100Hz(要求無視)\t48000Hz(要求無視)", //list
            L"プレイヤーからの 0(既定値)の場合の再生周波数です。\r\n"
            L"負の値を指定すると要求を無視します。\r\n"
            L"例えば -44100 を指定するとプレイヤーから 48000 Hz で\r\n"
            L"要求されても常に 44100 Hz で再生します。\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 kbmdx_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_DATA;
}
/////////////////////////////////////////////////////////////////////////////
void __fastcall kbmdx_GetSettings(IKpiConfig *pConfig, kbmdx_Settings *pSettings)
{
    pConfig->GetStr(SEC_GENERAL, KEY_PDX, 
                    pSettings->szPdxPath, sizeof(pSettings->szPdxPath), L"");
    wchar_t *path_delimiter = wcsrchr(pSettings->szPdxPath, L'\\');
    if(pSettings->szPdxPath[0]){
        if(path_delimiter && *path_delimiter != L'\\'){
            wcsncat_s(pSettings->szPdxPath, L"\\", _TRUNCATE);
        }
    }
    //pSettings->bEnableLPF = pConfig->GetInt(SEC_GENERAL, KEY_LPF, 1) != 0;
    pSettings->nSampleRate = pConfig->GetInt(SEC_GENERAL, KEY_SAMPLERATE, SAMPLERATE_DEFAULT);
    switch(pSettings->nSampleRate){
        case 22050: case 44100: case 48000:
        case -22050: case -44100: case -48000:break;
        default: pSettings->nSampleRate = SAMPLERATE_DEFAULT;break;
    }
}
/////////////////////////////////////////////////////////////////////////////
