import 'package:get_it/get_it.dart'; import 'package:http/http.dart' as http; import '../../core/utils/app_logger.dart'; import '../../data/datasources/chat_remote_data_source.dart'; import '../../data/datasources/event_remote_data_source.dart'; import '../../data/datasources/notification_remote_data_source.dart'; import '../../data/datasources/user_remote_data_source.dart'; import '../../data/repositories/chat_repository_impl.dart'; import '../../data/repositories/friends_repository_impl.dart'; import '../../data/repositories/user_repository_impl.dart'; import '../../data/services/preferences_helper.dart'; import '../../data/services/secure_storage.dart'; import '../../domain/repositories/chat_repository.dart'; import '../../domain/usecases/get_user.dart'; import '../../presentation/state_management/chat_bloc.dart'; import '../../presentation/state_management/event_bloc.dart'; /// Instance globale pour gérer l'injection des dépendances via GetIt final sl = GetIt.instance; /// Fonction d'initialisation pour enregistrer toutes les dépendances. /// Utilisée pour fournir des services, des data sources, des repositories et des use cases. void init() { // Log de démarrage de l'injection des dépendances AppLogger.i("Démarrage de l'initialisation des dépendances.", tag: 'DI'); // Register Http Client sl.registerLazySingleton(() => http.Client()); AppLogger.d('Client HTTP enregistré.', tag: 'DI'); // Register Data Sources sl.registerLazySingleton(() => UserRemoteDataSource(sl())); AppLogger.d('DataSource pour UserRemoteDataSource enregistré.', tag: 'DI'); sl.registerLazySingleton(() => ChatRemoteDataSource(sl())); AppLogger.d('DataSource pour ChatRemoteDataSource enregistré.', tag: 'DI'); sl.registerLazySingleton(() => EventRemoteDataSource(sl())); AppLogger.d('DataSource pour EventRemoteDataSource enregistré.', tag: 'DI'); sl.registerLazySingleton(() => NotificationRemoteDataSource(sl())); AppLogger.d('DataSource pour NotificationRemoteDataSource enregistré.', tag: 'DI'); // Note: ChatWebSocketService n'est pas enregistré dans GetIt car il nécessite // un userId qui n'est connu qu'au moment de la connexion. Il est créé // dynamiquement dans les écrans qui en ont besoin. // Register Services sl.registerLazySingleton(() => SecureStorage()); AppLogger.d('Service SecureStorage enregistré.', tag: 'DI'); sl.registerLazySingleton(() => PreferencesHelper()); AppLogger.d('Service PreferencesHelper enregistré.', tag: 'DI'); // Register Repositories sl.registerLazySingleton(() => UserRepositoryImpl(remoteDataSource: sl())); AppLogger.d('Repository pour UserRepositoryImpl enregistré.', tag: 'DI'); sl.registerLazySingleton( () => ChatRepositoryImpl(remoteDataSource: sl()), ); AppLogger.d('Repository pour ChatRepository enregistré.', tag: 'DI'); sl.registerLazySingleton(() => FriendsRepositoryImpl(client: sl())); AppLogger.d('Repository pour FriendsRepositoryImpl enregistré.', tag: 'DI'); // Register Use Cases sl.registerLazySingleton(() => GetUser(sl())); AppLogger.d('UseCase pour GetUser enregistré.', tag: 'DI'); // Register Blocs sl.registerFactory(() => ChatBloc(chatRepository: sl())); AppLogger.d('Bloc pour ChatBloc enregistré.', tag: 'DI'); sl.registerFactory(() => EventBloc(remoteDataSource: sl())); AppLogger.d('Bloc pour EventBloc enregistré.', tag: 'DI'); // Log de fin d'initialisation des dépendances AppLogger.i('Initialisation des dépendances terminée.', tag: 'DI'); }