using OmsorgCore.Domain.Common;

namespace OmsorgCore.Domain.Entities;

/// <summary>
/// Ein einzelner Wert innerhalb einer <see cref="ValueList"/> (z. B. "Aktiv" in der Liste
/// "EmployeeStatus"). <see cref="IsInitial"/>/<see cref="IsTerminal"/> sind nur für Listen mit
/// Übergangsregeln relevant (aktuell nur "OrderStatus", siehe <see cref="ValueListItemTransition"/>)
/// und bei allen anderen Listen einfach <c>false</c>. <see cref="TriggersFollowUp"/> ist nur für den
/// "Kein Bedarf"-Eintrag der Liste "CrmStatus" relevant (siehe FacilitiesController) und entkoppelt
/// die automatische Wiedervorlage vom konkreten Anzeigetext, damit ein Umbenennen über die
/// Status-Verwaltung die Automatik nicht lautlos bricht.
/// </summary>
public class ValueListItem : Entity
{
    public Guid ValueListId { get; set; }
    public ValueList ValueList { get; set; } = null!;

    public string Value { get; set; } = string.Empty;
    public int SortOrder { get; set; }
    public bool IsDefault { get; set; }
    public bool IsInitial { get; set; }
    public bool IsTerminal { get; set; }
    public bool TriggersFollowUp { get; set; }
    public bool IsEditableByOwner { get; set; }

    /// <summary>
    /// Nur für "AbsenceStatus" relevant: markiert den Status-Wert (aktuell "Genehmigt"), der eine
    /// Mitarbeiterzuweisung im überlappenden Zeitraum blockiert/warnt (FR-EM-3, Abwesenheitsprüfung).
    /// Bei allen anderen Listen bleibt es <c>false</c> — analog zu <see cref="IsInitial"/>/<see cref="IsTerminal"/>.
    /// </summary>
    public bool BlocksAssignment { get; set; }
}
