#nullable enable
using Baya.Application.Models.Booking;
using Baya.Application.Models.Common;
using Mediator;

namespace Baya.Application.Features.Bookings.Commands.TransitionBookingStatus;

/// <summary>Applies an admin/dispute status change to a booking — only if allowed by the transition table
/// <b>and</b> consistent with EVV/session state (e.g. you cannot move to <c>in_progress</c> with no session
/// checked in, nor to <c>completed</c> while a session is still live). Cancellation goes through the cancel
/// endpoint (which snapshots the policy), not here. The booking id comes from the route.</summary>
public record TransitionBookingStatusCommand(string TargetStatus, string? Reason = null, long BookingId = 0)
    : IRequest<OperationResult<BookingDetailDto>>;
