#nullable enable
namespace Baya.Application.Models.Booking;

/// <summary>
/// The full single-request view returned by create/accept/reject/cancel and the detail query. The
/// <b>nurse</b> view masks the encrypted full address (<see cref="AddressLine"/>/<see cref="PostalCode"/>/
/// recipient) — stage-1 disclosure surfaces only <see cref="CustomerNotes"/> plus a coarse city/district
/// location. The <b>customer</b> (and admin) view returns their own full address.
/// </summary>
public record BookingRequestDto(
    long Id,
    string Status,
    long NurseId,
    string NurseName,
    decimal NurseRating,
    int NurseTotalReviews,
    long PatientId,
    string PatientName,
    long VariantId,
    string VariantLabel,
    string VariantPriceUnit,
    long CustomerAddressId,
    string AddressTitle,
    long CityId,
    string CityNameFa,
    string CityNameEn,
    long? DistrictId,
    string? DistrictNameFa,
    string? DistrictNameEn,
    string? AddressLine,
    string? PostalCode,
    string? RecipientName,
    string? RecipientPhone,
    string? RequiredCaregiverGender,
    DateOnly RequestedDate,
    TimeOnly RequestedTimeStart,
    TimeOnly RequestedTimeEnd,
    string? CustomerNotes,
    DateTime NurseResponseDeadlineAt,
    DateTime? PaymentDeadlineAt,
    string? NurseRejectionReason,
    DateTimeOffset CreatedAt,
    // The chosen variant's display rate (IRR digit-string) — for the summary card. This is the variant's
    // rate, NOT an engagement total: a booking_request stays money-free.
    string VariantPrice,
    string? NurseAvatarUrl,
    // The booking created once this request is converted (paid); null until then. Lets the confirmation
    // deep-link the booking + invoice.
    long? BookingId);
