namespace Baya.Domain.Entities.Booking;

/// <summary>
/// The closed status vocabulary of a <see cref="Booking"/> — the <b>post-payment</b> half of the
/// engagement lifecycle. Persisted as these stable snake_case codes (never a C# enum member name). The
/// allowed edges live in <see cref="BookingTransitions"/> and may never contradict EVV/session state.
/// </summary>
public static class BookingStatus
{
    /// <summary>Transient — a booking is created here and immediately confirmed on captured payment.</summary>
    public const string PendingPayment = "pending_payment";

    /// <summary>Payment captured, sessions generated, care instructions may now be added. Bookable engagement.</summary>
    public const string Confirmed = "confirmed";

    /// <summary>At least one session has an open EVV check-in.</summary>
    public const string InProgress = "in_progress";

    /// <summary>Every session is completed/cancelled/missed; sets the dispute window.</summary>
    public const string Completed = "completed";

    /// <summary>A dispute was opened inside the dispute window (admin flow).</summary>
    public const string Disputed = "disputed";

    /// <summary>The dispute window closed / dispute resolved. Terminal — payout eligibility is derived
    /// from <c>dispute_window_ends_at</c> + the ledger (b13), never from this status.</summary>
    public const string Closed = "closed";

    /// <summary>The engagement was cancelled by customer/nurse/admin. Terminal.</summary>
    public const string Cancelled = "cancelled";
}
