using Monitoring.Core.Domain.AssetManagement;
namespace Monitoring.Core.Domain.AssetStatus;

/// <summary>
/// История изменений статусов объектов
/// </summary>
public class AssetStatus
{
	public AssetStatusId Id { get; init; } = default!;
	/// <summary>
	/// Идентификатор объекта
	/// </summary>
	public AssetId AssetId { get; set; } = default!;

	/// <summary>
	/// Статус объекта (онлайн/оффлайн)
	/// </summary>
	public bool IsOnline { get; set; }

	/// <summary>
	/// Время изменения статуса
	/// </summary>
	public DateTime Timestamp { get; set; }

	/// <summary>
	/// Причина изменения статуса
	/// </summary>
	public string StatusChangeReason { get; set; } = string.Empty;
	
	public static AssetStatus Create(
		AssetId assetId,
		bool isOnline,
		string reason)
	{
		return new AssetStatus
		{
			Id = new AssetStatusId(Guid.NewGuid()),
			AssetId = assetId,
			IsOnline = isOnline,
			Timestamp = DateTime.UtcNow,
			StatusChangeReason = reason
		};
	}
}