/**
 * Single source of truth for how long a PENDING_PAYMENT booking has to be paid for,
 * shared by TasksService (which auto-cancels bookings past this deadline) and
 * SeatsService (which extends the seat hold to cover exactly this window when a
 * booking/PNR is created — without this, the seat hold reverted to its original
 * short seat-selection TTL and could expire mid-payment, letting a second customer
 * grab the same seat).
 */

/** Maximum time (hours) a passenger has to pay after booking. */
export const MAX_PAYMENT_HOURS = 2;
/** Minutes before departure: cutoff for new bookings and payment deadline. */
export const CUTOFF_MINUTES = 30;

/**
 * payment_deadline = MIN(booking_time + MAX_PAYMENT_HOURS, segment_departure - checkinMinutes)
 *
 * checkinMinutes defaults to CUTOFF_MINUTES but callers should pass the route-level
 * checkinMinutesBefore so that each route's own window is respected.
 */
export function computePaymentDeadline(
  createdAt: Date,
  departureAt: Date,
  checkinMinutes: number = CUTOFF_MINUTES,
): Date {
  const maxDeadline    = new Date(createdAt.getTime() + MAX_PAYMENT_HOURS * 60 * 60 * 1000);
  const cutoffDeadline = new Date(departureAt.getTime() - checkinMinutes * 60 * 1000);
  return maxDeadline < cutoffDeadline ? maxDeadline : cutoffDeadline;
}
