/*!
	サーバツールインタフェース
*/
#pragma once
#include "types/WorkspaceTypes.h"
#include "IManagerInterface.h"

/*!
	ログタイプ
*/
enum
{
	//!	表示のみ、ファイルには記録されない
	SYSTEM_LOG_INFO				= 100,

	//!	ファイルに記録されるログ
	SYSTEM_LOG_INFO_LOG			= 0,

	//!	警告
	SYSTEM_LOG_WARNING			= -100,

	//!	エラー
	SYSTEM_LOG_ERROR			= -200,

	//!	致命的エラー
	SYSTEM_LOG_FATAL_ERROR		= -300,
};

/*!
	メッセージタイプ
*/
enum
{
	//!	消去
	SYSTEM_MESSAGE_OFF			= 0,

	//!	青文字
	SYSTEM_MESSAGE_INFO			= 100,

	//!	黄文字
	SYSTEM_MESSAGE_WARNING		= 200,

	//!	赤文字
	SYSTEM_MESSAGE_ERROR		= 300,
};


/*!
	設定名
*/
#define	MANAGER_SETTING		_U8("ManagerSetting")
#define	FILTER_SETTING		_U8("FilterSetting")
#define	RESPONSE_SETTING	_U8("ResponseSetting")
#define	SERVER_STATUS		_U8("ServerStatus")
#define	SERVER_INFO			_U8("ServerInfo")


/*!
	サーバ内部用ツール
*/
class IServerTool
{
public:
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//	ステータス・ログ
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//!	サーバログの書き込み
	virtual void WriteSystemLog(LPCU8STR callerName, int logType, LPCU8STR logString) = 0;

	//!	サーバステータスの変更
	virtual void SetServerStatus(LPCU8STR statusName, LPCU8STR status, LPCU8STR statusInfo, LPCU8STR statusType) = 0;

	//!	サーバメッセージを通知
	virtual void NotifyServerMessage(LPCU8STR messageID, LPCU8STR message, int messageType, int autoOffTimeSec = -1) = 0;

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//	ワークスペースへのアクセスを取得
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//!	ワークスペースへのアクセスを取得
	virtual int GetServerWorkspaceAccess(IWorkspaceAccessRefPtr accessRef, LPCU8STR type, LPCU8STR section) = 0;

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//	インターフェース管理
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//!	インタフェース登録
	virtual int RegisterManagerInterface(LPCU8STR interfaceName, IManagerInterfacePtr ifRegister, IManagerInterfacePtr *oldInterface = NULL) = 0;

	//!	インターフェース登録解除
	virtual int UnRegisterManagerInterface(LPCU8STR interfaceName, IManagerInterfacePtr ifUnRegister, IManagerInterfacePtr oldInterface = NULL) = 0;

	//!	インタフェース取得
	virtual void *GetManagerInterface(LPCU8STR interfaceName, int ifVersion) = 0;
};
//!	ポインタ型
typedef IServerTool* IServerToolPtr;
