import 'package:get_it/get_it.dart'; import 'api/api_client.dart'; import 'storage/token_store.dart'; import '../features/auth/data/auth_repository.dart'; import '../features/home/data/driver_repository.dart'; import '../features/home/cubit/driver_cubit.dart'; import '../features/offers/data/offers_repository.dart'; import '../features/offers/bloc/offers_bloc.dart'; import '../features/trip/data/driver_trip_repository.dart'; import '../features/trip/data/driver_socket_service.dart'; import '../features/trip/data/trip_event_merger.dart'; import '../features/trip/data/fcm_service.dart'; import '../features/trip/bloc/driver_trip_bloc.dart'; final GetIt getIt = GetIt.instance; /// حقن التبعيات (docs/23 §1). /// /// **هذه نقطة إقفال الميزات المدفوعة**: الموديول المحروس يُسجَّل داخل /// `if (Features.x)` فلا يوجد أصلاً حين لا تكون الميزة مشتراة — بدل فحص /// متناثر في كل شاشة يُنسى أحدها (docs/22 §1.5). Future setupDi() async { getIt.registerLazySingleton(() => TokenStore()); getIt.registerLazySingleton(() => ApiClient(getIt())); getIt.registerLazySingleton( () => AuthRepository(getIt(), getIt()), ); // ── Driver Phase 3: Data Layer ── getIt.registerLazySingleton( () => DriverRepository(getIt()), ); getIt.registerLazySingleton( () => OffersRepository(getIt()), ); getIt.registerLazySingleton( () => DriverTripRepository(getIt()), ); getIt.registerLazySingleton( () => DriverTripEventMerger(), ); getIt.registerLazySingleton( () => DriverSocketService(getIt(), getIt()), ); getIt.registerLazySingleton( () => DriverFcmService(getIt()), ); // ── Driver Phase 3: Bloc/Cubit (lazy singletons — يُدمَّرون يدوياً عند logout) ── getIt.registerLazySingleton( () => DriverCubit(getIt()), ); getIt.registerLazySingleton( () => OffersBloc( offersRepo: getIt(), socket: getIt(), merger: getIt(), ), ); getIt.registerLazySingleton( () => DriverTripBloc( tripRepo: getIt(), socket: getIt(), merger: getIt(), ), ); }