#pragma once
#include "workspaceaccess.h"
#include "WorkspaceListAccess.h"


class CServerStatusLog :
	public CWorkspaceAccess
{
public:
	//	コンストラクタをまとめて定義
	DEFINE_COMMON_CONSTRUCTOR(CServerStatusLog);

	///////////////////////////////////////////////////////////////////////////////////////////////////
	//	プロパティ
	///////////////////////////////////////////////////////////////////////////////////////////////////
	//!	ステータス
	DEFINE_PROPERTY_METHOD_STR(StatusInfo, "StatusInfo", "");

	//!	発生時刻
	DEFINE_PROPERTY_METHOD_STR(Time, "Time", "");

	//!	コード
	DEFINE_PROPERTY_METHOD_INT(StatusCode, "StatusCode", 0);

	//!	表示時間
	DEFINE_PROPERTY_METHOD_INT(AutoOffTime, "AutoOffTime", -1);
};
typedef CWorkspaceTypedListAccess<CServerStatusLog, CWTLAName<'L', 'o', 'g'>> CServerStatusLogList;


class CServerStatusEntry :
	public CWorkspaceAccess
{
public:
	//	コンストラクタをまとめて定義
	DEFINE_COMMON_CONSTRUCTOR(CServerStatusEntry);

	///////////////////////////////////////////////////////////////////////////////////////////////////
	//	プロパティ
	///////////////////////////////////////////////////////////////////////////////////////////////////
	//!	ステータス名
	DEFINE_PROPERTY_METHOD_STR(StatusName, "StatusName", "");

	//!	状態
	DEFINE_PROPERTY_METHOD_STR(Status, "Status", "");

	//!	説明
	DEFINE_PROPERTY_METHOD_STR(StatusInfo, "StatusInfo", "");

};


class CServerStatus :
	public CWorkspaceAccess
{
public:
	//	コンストラクタをまとめて定義
	DEFINE_COMMON_CONSTRUCTOR(CServerStatus);

	///////////////////////////////////////////////////////////////////////////////////////////////////
	//	下位アクセス
	///////////////////////////////////////////////////////////////////////////////////////////////////
	//!	サーバステータスを取得
	CServerStatusEntry GetServerStatusEntry(CString statusName) { return GetAccess("Status::" + statusName); };

	//!	ステータスログを取得
	CServerStatusLogList GetStatusLog(CString callerName) { return GetAccess("StatusLog::" + callerName); };
};
