import 'package:comwell_key_app/database/comwell_db.dart';
import 'package:comwell_key_app/domain/repositories/booking_details_repository.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/domain/repositories/profile_repository.dart';
import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:comwell_key_app/utils/seos_repository.dart';
import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
class CheckInRepository {
final api = Api();
final db = locator.get<ComwellDatabase>();
final seosRepository = locator<SeosRepository>();
final profileRepository = locator<ProfileRepository>();
final bookingDetailsRepository = locator<BookingDetailsRepository>();
Future<dynamic> checkIn(String confirmationNumber) async {
try {
final response = await api.checkIn(confirmationNumber);
return response;
} on DioException catch (err) {
if (err.response?.data != null) {
final errorData = err.response?.data as Map<String, dynamic>;
throw Exception("${errorData['title']}: ${errorData['detail']}");
}
throw Exception("Failed to check in: ${err.message}");
} catch (err, st) {
debugPrint("error in checkInRepository: $err, $st");
throw Exception("An unexpected error occurred during check-in");
}
}
Future<Booking> getBookingDetails(String hmsConfirmationNumber, String hotelCode) async {
final booking = await bookingDetailsRepository.getBookingDetails(hmsConfirmationNumber, hotelCode);
return booking;
}
Future<void> checkIfSetup() async {
final isSetup = await seosRepository.isEndpointSetup();
if (!isSetup) await seosRepository.startMobilePlugin();
}
Future<void> provisionKey(String hmsConfirmationNumber, String hotelCode) async {
await seosRepository.provisionKey(bookingId: hmsConfirmationNumber, hotelCode: hotelCode);
}
Future<void> getKeys(String hmsConfirmationNumber, String hotelCode) async {
final keys = await seosRepository.refreshKeys();
debugPrint("keys: $keys");
if (keys.isEmpty) {
throw Exception("Could not provision key for this booking");
}
}
static final mockBooking = Booking(
id: "helloworld",
firstName: "firstName",
lastName: "lastName",
bookerFirstName: "bookerFirstName",
bookerLastName: "bookerLastName",
isPrimaryGuest: false,
roomNumber: "1234",
startDate: DateTime.now(),
endDate: DateTime.now(),
confirmationNumber: "confirmationNumber",
reservationStatus: ReservationStatus.newreservation,
image: "",
hotelName: "hotelName",
roomType: "roomType",
children: 0,
adults: 2,
hotelCode: "hotelCode",
balance: 100,
maskedCardNumber: "1234567890",
bookingDate: DateTime.now(),
digitalCard: true,
guests: null,
addOnItems: const [],
);
}