//********************************************************************************
//*	ファイル名：ParameterManager.h	
//*	用　　　途：パラメータ管理クラス
//*	備　　　考：シングルトンパターン
//*	履　　　歴：
//********************************************************************************
/****************************
*	 コンパイル環境設定		*
****************************/
#pragma once
/****************************
*	インクルードファイル	*
****************************/
#include "Common.h"
#include "CollectCommon.h"
#include "IniFile.h"
#include "MemManager.h"
/****************************
*		 マクロ定数			*
****************************/
enum {
	PARAM_INIT_ERR_NONE			= 0	,
	PARAM_INIT_ERR_LOAD_INIT		,
} ;

/****************************
*		 構造体定義			*
****************************/
// テーブル列構造体
typedef struct {
	TCHAR			szName  [TBL_COL_LEN] ;		// 名称
} TABLE_COL, *P_TABLE_COL ;

// データ収集設定構造体
typedef struct {
	TCHAR			szDataPath		[_MAX_PATH] ;			// データフォルダパス
	TCHAR			szDataPathSub1	[_MAX_PATH] ;			// データフォルダパスサブ1
	TCHAR			szDataPathSub2	[_MAX_PATH] ;			// データフォルダパスサブ2
	TCHAR			szDataPathSub3	[_MAX_PATH] ;			// データフォルダパスサブ3
	TCHAR			szDataPathSub4	[_MAX_PATH] ;			// データフォルダパスサブ4
	TCHAR			szDataPathSub5	[_MAX_PATH] ;			// データフォルダパスサブ5
	TCHAR			szFileName[_MAX_FNAME];			// ファイル識別
	BOOL			bFileMove ;								// ファイル移動フラグ
	TCHAR			szMovePath		[_MAX_PATH] ;			// ファイル移動パス
	INT32			nUpFolderCopy ;							// ファイル移動時上位フォルダコピーフラグ
	UINT32			uFilesInFolder;							//	1フォルダあたりの最大ファイル数
	TCHAR			szTableName		[DB_TBL_LEN] ;			// テーブル名
	P_TABLE_COL		tpTableCol ;							// テーブル列名
	INT32			nCsvSingleRowNo ;						// CSV単票部行No
	INT32			nCsvReportRowNo ;						// CSV帳票部行No
	PINT32			pnCsvColNo ;							// CSV列No

} PARAM_COLLECT, *P_PARAM_COLLECT ;

// 初期パラメータ構造体
typedef struct {
	TCHAR			szDbHost	[DB_SETTING_LEN] ;			// DBホスト名
	TCHAR			szDbUser	[DB_SETTING_LEN] ;			// DBユーザー名
	TCHAR			szDbPassword[DB_SETTING_LEN] ;			// DBパスワード
	TCHAR			szDbName	[DB_SETTING_LEN] ;			// DB名
	UINT32			uDbPortNo;								// DBポート番号

	PARAM_COLLECT	taCollect	[NOF_COLLECT_DATA] ;		// データ収集設定

} PARAM_INIT, *P_PARAM_INIT ;

/****************************
*		 クラス定義			*
****************************/

class CParameterManager
{
private:
	//コンストラクタ＆コピーコンストラクタ封じ
	CParameterManager(void);
	~CParameterManager(void);

	CParameterManager(const CParameterManager* p);
	CParameterManager(const CParameterManager& p);
	CParameterManager& operator =(const CParameterManager& p);

public:
	// 公開メソッド
	//インスタンス取得（初回は生成）
	static CParameterManager& GetInstance(void);

	INT32				InitParam		() ;	// パラメータの初期化
	P_PARAM_INIT		RefParamInit	() { return &m_tParamInit ; } ;								// 初期設定参照

public:
	// 公開変数

private:
	// 内部メソッド
	BOOL				LoadParamInit	() ;						// 初期パラメータ読み込み
	void				SubCreateFolder	( CString strFolder ) ;		// フォルダない場合作成
	void				SubCreateFile	( CString strFile ) ;		// ファイルない場合作成


	void				AccessProfile  ( FLAG_ACCESS eAccessFlag, P_PARAM_INIT	 tpDst, CIniFile& IniFile );						// 初期設定ファイルアクセス
	void				AccessProfile  ( FLAG_ACCESS eAccessFlag, INT32 nCollectIndex, P_PARAM_COLLECT tpDst, CIniFile& IniFile );	// データ設定ファイルアクセス

private:
	// 内部変数
	PARAM_INIT			m_tParamInit ;						// 初期パラメータ(読込み専用)
	CMemManager			m_memTableCol[NOF_COLLECT_DATA] ;	// テーブル列名メモリ管理
	CMemManager			m_memCsvColNo[NOF_COLLECT_DATA] ;	// CSV列Noメモリ管理
};
/****************************
*		 関数　宣言			*
****************************/
/****************************
*		 変数　宣言			*
****************************/
