import 'package:comwell_key_app/database/comwell_db.dart';
import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/up_sales/mappers/up_sales_mapper.dart';
import 'package:comwell_key_app/up_sales/models/addon_list.dart';
import 'package:comwell_key_app/up_sales/models/up_sales.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:flutter/foundation.dart';
class UpSalesRepository {
final Api api = Api();
UpSalesRepository();
Future<UpSales> getRemoteUpSales(
String confirmationId, String hotelCode) async {
final response = await api.fetchUpSales(confirmationId, hotelCode);
return response.toUpSales();
}
Future<UpSales> getUpSales(String confirmationId, String hotelCode) async {
final upsales = await _checkIfUpSalesExists(confirmationId, hotelCode);
if (upsales != null &&
(upsales.roomUpgrades.isNotEmpty ||
upsales.addOnUpgrades.isNotEmpty)) {
return upsales;
}
final newUpsales =
await _fetchAndSaveUpSalesToDatabase(confirmationId, hotelCode);
return newUpsales;
}
Future<UpSales> _fetchAndSaveUpSalesToDatabase(
String confirmationId, String hotelCode) async {
try {
final response = await api.fetchUpSales(confirmationId, hotelCode);
await locator<ComwellDatabase>().upsalesDAO.insertUpsale(response);
final upsales = response.toUpSales();
debugPrint("Up sales saved to database: $upsales");
return upsales;
} on Exception catch (e) {
debugPrint("Error fetching up sales: $e");
rethrow;
}
}
Future<UpSales?> _checkIfUpSalesExists(
String confirmationId, String hotelCode) async {
try {
final upsales = await locator<ComwellDatabase>()
.upsalesDAO
.getUpsaleByConfirmationNumber(confirmationId);
return upsales;
} catch (e) {
debugPrint("Error checking if up sales exists: $e");
return null;
}
}
Future<void> addUpSalesToBooking(String confirmationId, String hotelCode,
String roomType, List<AddOnList> selectedUpSales) async {
await api.addUpSalesToBooking(
confirmationId, hotelCode, roomType, selectedUpSales);
}
}