import 'package:get_it/get_it.dart'; import 'package:immich_mobile/domain/interfaces/asset.interface.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/asset.repository.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/sync.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() { di.registerSingleton(DriftDatabaseRepository()); _registerRepositories(); _registerPreGlobalStates(); } static void configureServicesForIsolate({ required DriftDatabaseRepository database, }) { di.registerSingleton(database); _registerRepositories(); } static void _registerRepositories() { /// Repositories di.registerFactory(() => StoreDriftRepository(di())); di.registerFactory(() => LogDriftRepository(di())); di.registerFactory(() => AppSettingService(di())); di.registerFactory(() => UserDriftRepository(di())); di.registerFactory( () => RemoteAssetDriftRepository(di()), ); /// Services di.registerFactory(() => const LoginService()); } static void _registerPreGlobalStates() { di.registerSingleton(AppRouter()); di.registerLazySingleton(() => AppThemeCubit(di())); } static void registerPostValidationServices(String endpoint) { di.registerSingleton(ImmichApiClient(endpoint: endpoint)); di.registerFactory(() => UserService( di().getUsersApi(), )); di.registerFactory(() => ServerInfoService( di().getServerApi(), )); di.registerFactory(() => SyncService(di(), di())); } static void registerPostGlobalStates() { di.registerLazySingleton( () => ServerFeatureConfigCubit(di()), ); } static void registerCurrentUser(User user) { if (di.isRegistered()) { di().updateUser(user); } else { di.registerSingleton(CurrentUserCubit(user)); } } }