import 'package:get_it/get_it.dart'; import 'package:immich_mobile/domain/interfaces/log.interface.dart'; import 'package:immich_mobile/domain/interfaces/store.interface.dart'; import 'package:immich_mobile/domain/interfaces/user.interface.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/domain/repositories/database.repository.dart'; import 'package:immich_mobile/domain/repositories/log.repository.dart'; import 'package:immich_mobile/domain/repositories/store.repository.dart'; import 'package:immich_mobile/domain/repositories/user.repository.dart'; import 'package:immich_mobile/domain/services/app_setting.service.dart'; import 'package:immich_mobile/domain/services/login.service.dart'; import 'package:immich_mobile/domain/services/server_info.service.dart'; import 'package:immich_mobile/domain/services/user.service.dart'; import 'package:immich_mobile/presentation/modules/common/states/current_user.state.dart'; import 'package:immich_mobile/presentation/modules/common/states/server_info/server_feature_config.state.dart'; import 'package:immich_mobile/presentation/modules/theme/states/app_theme.state.dart'; import 'package:immich_mobile/presentation/router/router.dart'; import 'package:immich_mobile/utils/immich_api_client.dart'; final di = GetIt.I; class ServiceLocator { const ServiceLocator._internal(); static void configureServices() { // Register DB di.registerSingleton(DriftDatabaseRepository()); _registerPreValidationServices(); } static void _registerPreValidationServices() { // ====== DOMAIN // Init store di.registerFactory(() => StoreDriftRepository(di())); // Logs di.registerFactory(() => LogDriftRepository(di())); // App Settings di.registerFactory(() => AppSettingService(di())); // User Repo di.registerFactory(() => UserDriftRepository(di())); // Login Service di.registerFactory(() => const LoginService()); // ====== PRESENTATION // App router di.registerSingleton(AppRouter()); // Global states di.registerLazySingleton(() => AppThemeCubit(di())); } static void registerPostValidationServices(String endpoint) { di.registerSingleton(ImmichApiClient(endpoint: endpoint)); // ====== DOMAIN di.registerFactory(() => UserService(di())); di.registerFactory(() => ServerInfoService(di())); // ====== PRESENTATION di.registerLazySingleton( () => ServerFeatureConfigCubit(di()), ); } static void registerCurrentUser(User user) { if (di.isRegistered()) { di().updateUser(user); } else { di.registerSingleton(CurrentUserCubit(user)); } } }