import 'package:rasadyar_chicken/data/common/dio_error_handler.dart'; import 'package:rasadyar_chicken/features/common/presentation/routes/routes.dart'; import 'package:rasadyar_chicken/features/common/data/di/common_di.dart'; import 'package:rasadyar_chicken/features/poultry_science/data/di/poultry_science_di.dart'; import 'package:rasadyar_chicken/features/steward/data/di/steward_di.dart'; import 'package:rasadyar_chicken/features/province_operator/data/di/province_operator_di.dart'; import 'package:rasadyar_chicken/features/province_inspector/data/di/province_inspector_di.dart'; import 'package:rasadyar_chicken/features/city_jahad/data/di/city_jahad_di.dart'; import 'package:rasadyar_chicken/features/vet_farm/data/di/vet_farm_di.dart'; import 'package:rasadyar_chicken/features/super_admin/data/di/super_admin_di.dart'; import 'package:rasadyar_chicken/features/province_supervisor/data/di/province_supervisor_di.dart'; import 'package:rasadyar_chicken/features/jahad/data/di/jahad_di.dart'; import 'package:rasadyar_core/core.dart'; GetIt diChicken = GetIt.asNewInstance(); Future setupChickenDI() async { if (diChicken.isRegistered()) { await diChicken.unregister(); } diChicken.registerSingleton(DioErrorHandler()); var tokenService = Get.find(); tokenService.getBaseUrl(Module.chicken); diChicken.registerLazySingleton( () => AppInterceptor( // سامانه مرغ فعلاً رفرش توکن ندارد refreshTokenCallback: () async => null, saveTokenCallback: (String newToken) async { await tokenService.saveAccessToken(Module.chicken, newToken); }, clearTokenCallback: () async { await tokenService.deleteModuleTokens(Module.chicken); Get.offAllNamed(CommonRoutes.auth, arguments: Module.chicken); }, ), instanceName: 'chickenInterceptor', ); var baseUrl = tokenService.baseurl.value; diChicken.registerLazySingleton( () => DioRemote( baseUrl: baseUrl, interceptors: diChicken.get( instanceName: 'chickenInterceptor', ), ), ); final dioRemote = diChicken.get(); await dioRemote.init(); // Setup common feature DI await setupCommonDI(diChicken, dioRemote); // Setup poultry_science feature DI await setupPoultryScienceDI(diChicken, dioRemote); // Setup steward feature DI await setupStewardDI(diChicken, dioRemote); // Setup province_operator feature DI await setupProvinceOperatorDI(diChicken, dioRemote); // Setup province_inspector feature DI await setupProvinceInspectorDI(diChicken, dioRemote); // Setup city_jahad feature DI await setupCityJahadDI(diChicken, dioRemote); // Setup vet_farm feature DI await setupVetFarmDI(diChicken, dioRemote); // Setup super_admin feature DI await setupSuperAdminDI(diChicken, dioRemote); // Setup province_supervisor feature DI await setupProvinceSupervisorDI(diChicken, dioRemote); // Setup jahad feature DI await setupJahadDI(diChicken, dioRemote); } Future newSetupAuthDI(String newUrl) async { var tokenService = Get.find(); await tokenService.saveBaseUrl(Module.chicken, newUrl); // پاک‌سازی DI مخصوص ماژول مرغ await diChicken.resetScope(); diChicken.pushNewScope(); // --- Re-register AppInterceptor diChicken.registerLazySingleton( () => AppInterceptor( refreshTokenCallback: () async => null, saveTokenCallback: (newToken) async {}, clearTokenCallback: () async { await tokenService.deleteModuleTokens(Module.chicken); Get.offAllNamed(CommonRoutes.auth, arguments: Module.chicken); }, ), instanceName: 'chickenInterceptor', ); // --- Re-register DioRemote diChicken.registerLazySingleton( () => DioRemote( baseUrl: newUrl, interceptors: diChicken.get( instanceName: 'chickenInterceptor', ), ), ); final dioRemote = diChicken.get(); await dioRemote.init(); // --- common, poultry_science, steward, and other features await setupCommonDI(diChicken, dioRemote); await setupPoultryScienceDI(diChicken, dioRemote); await setupStewardDI(diChicken, dioRemote); await setupProvinceOperatorDI(diChicken, dioRemote); await setupProvinceInspectorDI(diChicken, dioRemote); await setupCityJahadDI(diChicken, dioRemote); await setupVetFarmDI(diChicken, dioRemote); await setupSuperAdminDI(diChicken, dioRemote); await setupProvinceSupervisorDI(diChicken, dioRemote); await setupJahadDI(diChicken, dioRemote); } Future reRegister(T Function() factory) async { if (diChicken.isRegistered()) { await diChicken.unregister(); } diChicken.registerLazySingleton(factory); } Future removeChickenDI() async { await diChicken.resetScope(); }