namespace Monitoring.Core.Domain.CheckListManagement;

/// <summary>
/// Пункт проверки.
/// </summary>
public class CheckListItem
{
	/// <summary>
	/// ИД пункта проверки.
	/// </summary>
	public CheckListItemId Id { get; } = null!;

	/// <summary>
	/// Пункт проверки.
	/// </summary>
	public CheckListTemplateItem Template { get; } = null!;

	/// <summary>
	/// Пункт проверки.
	/// </summary>
	public CheckListTemplateItemId TemplateId { get; } = null!;

	/// <summary>
	/// Пункт проверки.
	/// </summary>
	public CheckList CheckList { get; } = null!;

	/// <summary>
	/// Пункт проверки.
	/// </summary>
	public CheckListId CheckListId { get; } = null!;

	/// <summary>
	/// Пункт проверки.
	/// </summary>
	public bool IsChecked { get; private set; } = false;

	public void MarkAsChecked()
	{
		IsChecked = true;
	}

	public void MarkAsUnchecked()
	{
		IsChecked = false;
	}

	public static CheckListItem Create(CheckListId checkListId, CheckListTemplateItemId templateItemId)
	{
		return new CheckListItem(checkListId, templateItemId);
	}

	private CheckListItem(CheckListId checkListId, CheckListTemplateItemId templateItemId)
	{
		Id = CheckListItemId.Create(Guid.CreateVersion7());
		CheckListId = checkListId;
		TemplateId = templateItemId;
		IsChecked = false;
	}

	// For EF
	protected CheckListItem() { }
}
