using OmsorgCore.Domain.Common;

namespace OmsorgCore.Domain.Entities;

/// <summary>
/// Abwesenheits-/Urlaubs-/Krankmeldungsantrag eines Mitarbeiters (FR-CON-1, Datenbasis für die
/// spätere Verfügbarkeitsprüfung in FR-EM-3). <see cref="Type"/> unterscheidet Urlaub/Krankmeldung/
/// Sonstige über die ValueList "AbsenceType" statt über getrennte Entitäten, da alle übrigen Felder
/// identisch sind (siehe Root-CLAUDE.md, "jede Information wird nur einmal gespeichert").
/// </summary>
public class Absence : AuditableEntity
{
    public Guid EmployeeId { get; set; }
    public Employee? Employee { get; set; }

    public string Type { get; set; } = string.Empty;
    public DateOnly StartDate { get; set; }
    public DateOnly EndDate { get; set; }
    public string? Reason { get; set; }
    public string? Substitute { get; set; }
    public string? Note { get; set; }

    // Kein hartkodierter Default hier (anders als z.B. Contract.Status) - der initiale Wert kommt
    // aus der admin-editierbaren ValueList "AbsenceStatus" (IsInitial-Flag) und wird in
    // AbsenceService.CreateAsync gesetzt, bevor der Antrag gespeichert wird.
    public string Status { get; set; } = string.Empty;
    public string? AdminNote { get; set; }
}
