using Monitoring.Core.Domain.AssetManagement;
using Monitoring.Core.Domain.EventManagement;

namespace Monitoring.Core.Domain;

/// <summary>
/// Заблокированный код события.
/// </summary>
public class LockedEventCode
{
	/// <summary>
	/// Идентификатор.
	/// </summary>
	public LockedEventCodeId Id { get; } = default!;

	/// <summary>
	/// Объект.
	/// </summary>
	public Asset Asset { get; } = default!;

	/// <summary>
	/// ИД объекта.
	/// </summary>
	public AssetId AssetId { get; } = default!;

	/// <summary>
	/// Идентификатор кода события.
	/// </summary>
	public EventCodeId EventCodeId { get; private set; } = default!;

	/// <summary>
	/// Код события.
	/// </summary>
	public EventCode EventCode { get; } = default!;

	/// <summary>
	/// Создает заблокированный код события.
	/// </summary>
	/// <param name="index">Индекс.</param>
	/// <param name="name">Наименование.</param>
	/// <param name="description">Описание.</param>
	/// <param name="assetId">ИД объекта.</param>
	/// <returns>Заблокированный код события.</returns>
	public LockedEventCode(LockedEventCodeId id, EventCodeId eventCodeId, AssetId assetId)
	{
		Id = id;
		EventCodeId = eventCodeId;
		AssetId = assetId;
	}

	// For EF Core
	private LockedEventCode() { }
}
