#include <windows.h>
#include <stdio.h>
#include "kpi.h"
#include "kbwavefile_config.h"

static const wchar_t SEC_General[] = L"General";
static const wchar_t KEY_OutputPath[] = L"OutputPath";
static const wchar_t KEY_DisableDialog[] = L"DisableDialog";
static const wchar_t KEY_Benchmark[] = L"Benchmark";
///////////////////////////////////////////////////////////////////////////////
BOOL __fastcall kbwavefile_EnumConfig(IKpiConfigEnumerator *pEnumerator)
{
    KPI_CFG_KEY key[] =
    {
//   type, section, key, keydesc, default, min, max, list, listdesc, help
    {KPI_CFG_TYPE_BOOL, SEC_General, KEY_DisableDialog, L"ダイアログ非表示",
        L"0", NULL, NULL, //default/min/max
        NULL, NULL,       //list/listdesc
        L"true にするとデバイスオープン時に「使用上の注意」ダイアログが表示されなくなります。"
    },
    {KPI_CFG_TYPE_FILE, SEC_General, KEY_OutputPath, L"出力先",
        L"", L"Wave File(*.wav);\t*.wav", NULL, //default/min/max
        NULL, NULL,       //list/listdesc
        L"WAV ファイルの出力先ファイル名を指定します。\r\n"
        L"ここで指定しなくても、前回指定時のファイル名が常に保存されます。"
    },
    {KPI_CFG_TYPE_BOOL, SEC_General, KEY_Benchmark, L"ベンチマークテスト",
        L"0", NULL, NULL, //default/min/max
        NULL, NULL,       //list/listdesc
        L"true にすると「Benchmark Test」という名前のデバイスを列挙します。\r\n"
        L"本体が再生開始してから再生終了するまでにかかった時間とデータ量を\r\n"
        L"計測し、終了時に計測結果を表示します。\r\n"
        L"計測中は音声は鳴らず、WAV ファイルの出力もしません。\r\n"},
    {(DWORD)-1, 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 kbwavefile_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 kbwavefile_GetSettings(IKpiConfig *pConfig, kbwavefile_Settings *pSettings)
{
    pSettings->bDisableDialog  = pConfig->GetInt(SEC_General, KEY_DisableDialog, 0) != 0;
    pSettings->bEnumBenchmark = pConfig->GetInt(SEC_General, KEY_Benchmark, 0) != 0;
    pConfig->GetStr(SEC_General, KEY_OutputPath, pSettings->szOutputPath, sizeof(pSettings->szOutputPath), L"");
}
///////////////////////////////////////////////////////////////////////////////
void __fastcall kbwavefile_SetSettings(IKpiConfig *pConfig, const kbwavefile_Settings *pSettings)
{
    pConfig->SetInt(SEC_General, KEY_DisableDialog, pSettings->bDisableDialog);
    pConfig->SetInt(SEC_General, KEY_Benchmark, pSettings->bEnumBenchmark);
    pConfig->SetStr(SEC_General, KEY_OutputPath, pSettings->szOutputPath);
}
