#pragma once
#include "ThreadSkeleton.h"
#include "Settings.h"
#include "ServerToolWrap.h"
#include "ILogManager.h"
#include "SimpleManagerInterfaceImplement.h"

/*!
	ログエントリ
*/
class CLogManagerEntry
{
public:
	CLogManagerEntry() {};
	CLogManagerEntry(CString filePath, CString log)
	{
		m_filePath = filePath;
		m_log = log;
	};

	//!	ファイル名
	CString	m_filePath;

	//!	ログ
	CString	m_log;
};

//!	ログエントリリスト
typedef	CList<CLogManagerEntry>	CLogManagerEntryList;


/*!
	アクセスログマネージャ

	ログキャッシュ機能を提供する
*/
class CLogManager : protected CThreadSkeleton, protected ILogManager
{
public:
	CLogManager(void);
	virtual ~CLogManager(void);

	///////////////////////////////////////////////////////////////////////////////////////////////////
	//	操作
	///////////////////////////////////////////////////////////////////////////////////////////////////
	//!	開始
	void Start(CIServerToolWrap serverTool);

	//!	停止
	void Stop();

protected:
	///////////////////////////////////////////////////////////////////////////////////////////
	//	ILogManager
	///////////////////////////////////////////////////////////////////////////////////////////
	//!	アクセスログ出力
	void WriteAccessLog(LPCSTR filePath, LPCSTR log);

	/////////////////////////////////////////////////////////////////////////////////////
	//	スレッド関数
	/////////////////////////////////////////////////////////////////////////////////////
	//!	スレッド
	void ThreadMain();

	//!	ログ出力
	void FlashLog();

	//!	ログをファイルへ
	void WriteLogs(FILE *log, CString filePath);

	/////////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	/////////////////////////////////////////////////////////////////////////////////////
	//!	初期化フラグ
	CInterlockCounter					m_init;

	//!	サーバツール
	CIServerToolWrap					m_serverTool;

	//!	インタフェース
	CSimpleManagerInterfaceImplement	m_managerInterface;

	//!	設定
	CLogManagerSetting					m_setting;

	//!	ログ
	CLogManagerEntryList				m_logList;

	//!	インターバル時間
	int									m_intervalTime;

	//!	前回作成したディレクトリ
	CString								m_oldDir;
};
