import 'package:comwell_key_app/authentication/authentication_repository.dart';
import 'package:comwell_key_app/check_out/check_out_repository.dart';
import 'package:comwell_key_app/choose_share_room/choose_share_room_repository.dart';
import 'package:comwell_key_app/contact/repository/contact_repository.dart';
import 'package:common/services/msal_service.dart';
import 'package:comwell_key_app/database/comwell_db.dart';
import 'package:comwell_key_app/domain/repositories/bluetooth_repository.dart';
import 'package:comwell_key_app/domain/repositories/booking_details_repository.dart';
import 'package:comwell_key_app/domain/repositories/internet_status_repository.dart';
import 'package:comwell_key_app/find_booking/find_booking_repository.dart';
import 'package:comwell_key_app/hotel_information/repository/hotel_information_repository.dart';
import 'package:comwell_key_app/domain/repositories/housekeeping_repository.dart';
import 'package:comwell_key_app/key/repository/key_repository.dart';
import 'package:comwell_key_app/my_booking/my_booking_repository.dart';
import 'package:comwell_key_app/domain/repositories/notifications_repository.dart';
import 'package:comwell_key_app/overview/repository/overview_repository.dart';
import 'package:comwell_key_app/domain/repositories/pregistration_repository.dart';
import 'package:comwell_key_app/domain/repositories/profile_repository.dart';
import 'package:comwell_key_app/domain/repositories/profile_settings_repository.dart';
import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/services/http_client.dart';
import 'package:comwell_key_app/share/share_booking_repository.dart';
import 'package:comwell_key_app/push_notifications/push_notification_repository.dart';
import 'package:comwell_key_app/tracking/comwell_tracking.dart';
import 'package:comwell_key_app/up_sales/up_sales_repository.dart';
import 'package:comwell_key_app/utils/secure_storage.dart';
import 'package:comwell_key_app/utils/seos_repository.dart';
import 'package:comwell_key_app/routing/app_router.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/foundation.dart';
import 'package:get_it/get_it.dart';
import 'package:payment_plugin/domain/repositories/adyen_repository.dart';
import 'package:seos_mobile_keys_plugin/seos_mobile_keys_plugin.dart';
final locator = GetIt.I;
void registerDatabase() {
if (locator.isRegistered<ComwellDatabase>()) return;
locator.registerLazySingleton<ComwellDatabase>(() {
return ComwellDatabase();
});
}
void setupLocator() {
locator.registerFactory<DeviceInfoPlugin>(() => DeviceInfoPlugin());
if (!kIsWeb) {
locator.registerSingleton(ComwellPreferences());
locator.registerSingleton(ComwellTracking());
registerDatabase();
locator.registerSingleton(SecureStorage());
locator.registerSingleton(MSALService());
locator.registerSingleton(SeosMobileKeysPlugin());
locator.registerSingleton(ComwellHttpClient());
locator.registerSingleton(Api());
locator.registerFactory(() => KeyRepository(locator.get()));
locator.registerSingleton(rootNavigatorKey);
locator.registerSingleton(
SeosRepository(
locator.get(),
locator.get(),
locator.get(),
),
);
locator.registerFactory(() => OverviewRepository(locator.get()));
locator.registerFactory(() => ProfileSettingsRepository());
locator.registerSingleton(
AuthenticationRepository(
locator.get(),
locator.get(),
locator.get(),
locator.get(),
),
);
locator.registerFactory(() => BookingDetailsRepository());
locator.registerFactory(() => ProfileRepository(locator.get(), locator.get()));
locator.registerFactory(() => PreregistrationRepository());
locator.registerFactory(() => HotelInformationRepository());
locator.registerFactory(
() => NotificationsRepository(
locator(),
locator(),
),
);
locator.registerFactory(() => ContactRepository());
locator.registerFactory(() => UpSalesRepository());
locator.registerFactory(() => ChooseShareRoomRepository());
locator.registerFactory(() => FindBookingRepository());
locator.registerFactory(() => CheckOutRepository());
locator.registerFactory(() => MyBookingRepository());
locator.registerFactory(() => ShareBookingRepository());
locator.registerFactory(() => HouseKeepingRepository());
locator.registerFactory(() => PushNotificationRepository());
locator.registerFactory(() => BluetoothRepository());
locator.registerFactory(() => InternetStatusRepository());
locator.registerFactory(() => AdyenRepository(dio: locator.get<ComwellHttpClient>().dio));
}
}