import { Booking } from '../models/entities/Booking.entity';

export class BookingView {
  static toHostList(booking: Booking) {
    return {
      id: booking.id,
      eventType: booking.eventType
        ? { id: booking.eventType.id, title: booking.eventType.title }
        : null,
      guestName: booking.guestName,
      guestEmail: booking.guestEmail,
      startTime: booking.startTime.toISOString(),
      endTime: booking.endTime.toISOString(),
      guestTimezone: booking.guestTimezone,
      status: booking.status,
      meetingOutcome: booking.meetingOutcome ?? 'pending',
      hostRating: booking.hostRating,
      guestRating: booking.guestRating,
      guestFeedback: booking.guestFeedback,
      location: booking.eventType?.location ?? null,
      meetingUrl: booking.eventType?.meetingUrl ?? null,
      customAnswers: booking.customAnswers,
      embedSource: booking.embedSource ?? null,
      createdAt: booking.createdAt.toISOString(),
    };
  }

  static toList(bookings: Booking[], pagination: { page: number; limit: number; total: number }) {
    return {
      data: bookings.map(BookingView.toHostList),
      pagination,
    };
  }

  static toPublicConfirmation(
    booking: Booking,
    cancelUrl: string,
    hostName: string,
  ) {
    return {
      id: booking.id,
      status: booking.status,
      startTime: booking.startTime.toISOString(),
      endTime: booking.endTime.toISOString(),
      guestName: booking.guestName,
      guestEmail: booking.guestEmail,
      cancelUrl,
      confirmationMessage: `You're booked with ${hostName}!`,
    };
  }

  static toCancelResponse(booking: Booking) {
    return {
      id: booking.id,
      status: booking.status,
      message: 'Your booking has been cancelled.',
    };
  }
}
