import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/overview/models/bookings.dart';
import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/services/mappers/booking_mapper.dart';
import 'package:comwell_key_app/services/models/booking_dto.dart';

class OverviewRepository {
  final Api _api;

  OverviewRepository(this._api);

  Future<Bookings> fetchAllBookingsForUser() async {
    final currentBookings = await _api.fetchCurrentBookingsForUser();
    final pastBookings = await _api.fetchPastBookingsForUser();
    final cancelledBookings = await _api.fetchCancelledBookingsForUser();
    final bookings = Bookings(
      current: currentBookings.map((e) => e.toBooking()).toList(),
      past: pastBookings.map((e) => e.toBooking()).toList(),
      cancelled: cancelledBookings.map((e) => e.toBooking()).toList(),
    );

    return bookings;
  }

  Future<Booking?> findBooking(String bookingReference, String lastName) async {
    // needs implementation
    final dto = BookingDTO(
      roomNumber: "1234",
      hotelCode: "CBO",
      firstName: "Hello",
      lastName: "World",
      bookerFirstName: "Hello",
      bookerLastName: "World",
      guests: [GuestDTO(id: 1, firstName: "Hello", lastName: "World")],
      confirmationNumber: "12345",
      dayIn: "31-12-2000",
      dayOut: "31-12-2000",
      cancelTime: "31-12-2000",
      status: "newReservation",
      isCancelled: false,
      bookTime: "31-12-2000",
      roomType: "??",
      adults: 3,
      children: 5,
      balance: 12345,
      isPrimaryGuest: false,
      maskedCardNumber: "1234567890",
      addOnItems: [
        BookingAddonItem("addOnItem1", "addOnItem1", 1, 100),
        BookingAddonItem("addOnItem2", "addOnItem2", 1, 200),
        BookingAddonItem("addOnItem3", "addOnItem3", 1, 300),
      ],
    );
    return dto.toBooking();
  }

  final mockBookings = [1, 2, 3].map(
    (i) => Booking(
      id: "id$i",
      confirmationNumber: "crmConfirmationNumber$i",
      roomNumber: "roomNumber$i",
      startDate: DateTime.now(),
      endDate: DateTime.now(),
      reservationStatus: ReservationStatus.newreservation,
      image: "assets/images/no_current_bookings_background.jpeg",
      hotelName: "hotelName$i",
      roomType: "roomType$i",
      balance: 100,
      children: 3,
      adults: 3,
      hotelCode: "hotelCode$i",
      firstName: "firstName",
      lastName: "lastName",
      bookerFirstName: "bookerFirstName",
      bookerLastName: "bookerLastName",
      bookingDate: DateTime.now(),
      digitalCard: false,
      isPrimaryGuest: false,
      maskedCardNumber: "1234567890",
      addOnItems: [BookingAddonItem("addOnItem$i", "addOnItem$i", 1, 100)],
    ),
  );
}