namespace Baya.Domain.Entities.Booking;

/// <summary>
/// The closed status vocabulary of a <see cref="BookingRequest"/> — the <b>pre-payment</b> half of the
/// engagement lifecycle. Persisted as these stable snake_case codes (never a C# enum member name) so the
/// DB and the wire read the same. The forward-only edges live in <see cref="BookingRequestTransitions"/>.
/// </summary>
public static class BookingRequestStatus
{
    /// <summary>Awaiting the nurse's accept/reject before <c>nurse_response_deadline_at</c>.</summary>
    public const string PendingNurseResponse = "pending_nurse_response";

    /// <summary>Nurse accepted; the 30-minute <c>payment_deadline_at</c> window is open. No money yet.</summary>
    public const string AcceptedAwaitingPayment = "accepted_awaiting_payment";

    /// <summary>A booking was created from this request (set by b9 on payment capture). Terminal.</summary>
    public const string Converted = "converted";

    /// <summary>Nurse declined with a reason. Terminal.</summary>
    public const string RejectedByNurse = "rejected_by_nurse";

    /// <summary>The nurse never responded before the deadline (set by the expiry sweep). Terminal.</summary>
    public const string ExpiredNoResponse = "expired_no_response";

    /// <summary>The 30-minute payment window lapsed unpaid (set by the expiry sweep). Terminal.</summary>
    public const string PaymentDeadlineExpired = "payment_deadline_expired";

    /// <summary>The customer withdrew the request before paying. Terminal.</summary>
    public const string CancelledByCustomer = "cancelled_by_customer";
}
