#pragma once

//#include "fmpmd/fmpmd.h"

struct KbFMPMD_Settings
{
    int  nSampleRate;   //再生周波数
    int  nPPZRate;      //PPZ8 駆動周波数(0のとき駆動周波数と同じ)
    bool bEnableFileIO; //
    bool bFmCalc55k;    //FM を55kHz で合成する
    bool bNoPCMForcePlay;//PCM がなくても強制的に再生
    bool bPPSInterpolation;//補間(PPS)
    bool bP86Interpolation;//補間(P86)
    bool bPPZInterpolation;//補間(PPZ8)
    bool bUsePPS;              //PMD
    bool bRhythmUseWithSSGDrum;//PMD
    bool bPMD86PCMMode;        //PMD
    bool bADPCMPPZ8Emulate;    //FMP
};

class IKpiConfig;
class IKpiConfigEnumerator;

struct PM_DIGITS{
    const wchar_t* cszKey;//パートマスクセクション内でのキー名
    int nDigits;          //桁数  
};

//void __fastcall CheckMaskStr(wchar_t* pszDest, int nDestSize, const wchar_t* cszSrc, int nDigits);//nDigits=桁数

BOOL  __fastcall kbfmpmd_EnumConfig(IKpiConfig* pConfig, IKpiConfigEnumerator* pEnumerator, bool bPMD);//bPMD=true のとき PMD, false のとき FMP として列挙
/*DWORD __fastcall kbfmpmd_ApplyConfig(IKpiConfig* pConfig,
                                   const wchar_t* cszSection, //セクション名
                                   const wchar_t* cszKey, //キー名
                                   INT64  nValue, //変更後の値(BOOL/INT の場合)
                                   double dValue, //変更後の値(FLOAT の場合)
                                   const wchar_t* cszValue);//変更後の値(文字列)
*/
DWORD __fastcall kbfmpmd_ApplyConfig(IKpiConfig* pConfig,
                                    const wchar_t* cszSection, //セクション名
                                    const wchar_t* cszKey, //キー名
                                    INT64  nValue, //変更後の値(BOOL/INT の場合)
                                    double dValue, //変更後の値(FLOAT の場合)
                                    const wchar_t* cszValue, //変更後の値(文字列)
                                    const wchar_t* cszPmSection, //PartMask セクション名
                                    const PM_DIGITS *pPmDigits);

void __fastcall kbfmpmd_GetSettings(IKpiConfig* pConfig, KbFMPMD_Settings* pSettings);
void __fastcall kbfmpmd_GetPmdWinDllPath(IKpiConfig* pConfig, wchar_t* pszPath, int nSize);
void __fastcall kbfmpmd_GetWinFmpDllPath(IKpiConfig* pConfig, wchar_t* pszPath, int nSize);
void __fastcall kbfmpmd_GetRythmPath(IKpiConfig* pConfig, wchar_t* pszPath, int nSize);
void __fastcall kbfmpmd_GetPcmDirs(IKpiConfig* pConfig, wchar_t** ppszPath, int nSize);//メモリの解放は呼び出し側が行う
void __fastcall kbfmpmd_GetPartMaskStr(IKpiConfig* pConfig, const wchar_t *cszSection, const wchar_t *cszKey, 
                                       wchar_t* pszMask, int nSize, int nDigits);