//********************************************************************************
//	ファイル名：DailyLogManager.h													
//	用　　　途：ログ管理クラス定義											
//	備　　　考：															
//	履　　　歴：
//********************************************************************************
/****************************
*	 コンパイル環境設定		*
****************************/
#pragma once
/****************************
*	インクルードファイル	*
****************************/
#include "Log.h"
#include "Thread.h"
/****************************
*		 マクロ定数			*
****************************/
#define	LENGTH_DAILYLOG		260

#define ITV_CHK		100		//確認インターバル

/****************************
*		 構造体定義			*
****************************/

//ログ情報構造体
struct tagParamDailyLog{

	BOOL	bEnable;					// 有効フラグ

	TCHAR	szPath[_MAX_PATH];			// ログ保存パス（親パス）					
	TCHAR	szFileName[_MAX_PATH];		// ログファイル名（自動で尻に日付と拡張子追加）			

	INT32	nRestSize;					// 書き込み制限（残ディスクサイズ：GB）	
	INT32	nDaysOfDeadLine;			// ファイル削除期日（日）
	
	HWND	hDspMessageWnd;				// 画面表示更新メッセージ送信先ウインドウハンドル
	int		nDspMessageID;				// 画面表示更新メッセージID

};

/****************************
*		 クラス定義			*
****************************/
class CDailyLog
{
public:
								CDailyLog();
	virtual					   ~CDailyLog();

			//パラメータセット
			BOOL				SetParam(tagParamDailyLog& tParamDailyLog);
			BOOL				SetNofFileBuf(INT32 nNofFlieBuf);

			//パラメータ取得
			tagParamDailyLog	GetParam(){return m_tParamDailyLog;};

			//ログ文字列をバッファに追加
			BOOL				Print(TCHAR *szFmt, ...);
			BOOL				Print(CString &str);

			//表示用のログ文字列を取得
			CString				GetDspPrints();

			//バッファの中身をファイルに書き込み
			void				FileFlash();

			//設定期日以前のファイルを削除
			BOOL				DeleteDeadLineFile();

			//自分自身のログIDをセット
			void				SetID(UINT uLogID){m_uLogID = uLogID;};

protected:	
			CString				MakeFileName();
			CString				GetLogPrefix( );

			BOOL				DeleteDeadLineFile(CString &strPath, INT32 nDaysOfDeadLine);

protected:
			//パラメータ保持用
			tagParamDailyLog	m_tParamDailyLog;

			CLog	 			m_Log;					// ログファイル			


			CString				m_strFileName;			//ログファイルパス
			CString				m_strPrefix;			//挿入日付

			CFileFind			m_FileFinder ;

			CCriticalSection	m_cs;					// クリティカルセクション

			UINT				m_uLogID;				// 自分自身のログID

			CStringList			m_saFilePrints ;		// ファイル保存用ログ文字列リスト
			CStringList			m_saDspPrints ;			// 表示用ログ文字列リスト

			INT32				m_nNofFileBuf;			//ファイル保存用バッファ数

};





class CDailyLogManager : public CThread
{
public:
								CDailyLogManager();
	virtual					   ~CDailyLogManager();

			//初期化
			BOOL				Initialize(int nItvFlash , int nItvDelete);

			//新規ログを追加
			int					AddDailyLog(tagParamDailyLog& tParamDailyLog);

			//パラメータ関連
			BOOL				SetParam(UINT uLogID , tagParamDailyLog	 tParamDailyLog);
			BOOL				GetParam(UINT uLogID , tagParamDailyLog* tpParamDailyLog);

			BOOL				SetNofFileBuf(UINT uLogID , INT32 nNofFlieBuf);


			//ログ文字列をバッファに追加
			BOOL				Print(UINT uLogID , TCHAR *szFmt, ...);
			BOOL				Print(UINT uLogID , CString &str);
			
			//表示用のログ文字列を取得
			CString				GetDspPrints(UINT uLogID );

private:

	virtual	BOOL				Main();					// スレッドの処理実体

			int					m_nItvFlash;			// ファイル書き込み　実行間隔
			int					m_nItvDelete;			// ファイル削除確認　実行間隔
			
			int					m_nSleepCntFlash;		// ファイル書き込み　スリープカウント
			int					m_nSleepCntDelete;		// ファイル削除確認　スリープカウント

			CCriticalSection	m_cs;					// クリティカルセクション

			//ログクラスポインタ保持用可変長配列
			CArray<CDailyLog* , CDailyLog*>	m_arDailyLog;
};


/****************************
*		 関数　宣言			*
****************************/
/****************************
*		 変数　宣言			*
****************************/
