import 'package:provider/provider.dart'; import 'package:provider/single_child_widget.dart'; import 'package:tm_app/core/network/network_manager.dart'; import 'package:tm_app/core/services/tab_navigation_service.dart'; import 'package:tm_app/core/theme/theme_provider.dart'; import 'package:tm_app/data/repositories/company_ai_repository.dart'; import 'package:tm_app/data/repositories/home_repository.dart'; import 'package:tm_app/data/repositories/liked_tenders_repository.dart'; import 'package:tm_app/data/repositories/notification_repository.dart'; import 'package:tm_app/data/repositories/tender_detail_repository.dart'; import 'package:tm_app/data/repositories/tenders_repository.dart'; import 'package:tm_app/data/repositories/your_tenders_repository.dart'; import 'package:tm_app/data/services/home_service.dart'; import 'package:tm_app/data/services/liked_tenders_service.dart'; import 'package:tm_app/data/services/notification_check_service.dart'; import 'package:tm_app/data/services/notification_service.dart'; import 'package:tm_app/data/services/company_ai_service.dart'; import 'package:tm_app/data/services/notification_state_service.dart'; import 'package:tm_app/data/services/tender_detail_service.dart'; import 'package:tm_app/data/services/your_tenders_service.dart'; import 'package:tm_app/view_models/final_completion_of_documents_view_model.dart'; import '../../data/repositories/auth_repository.dart'; import '../../data/repositories/board_repositories.dart'; import '../../data/repositories/profile_repository.dart'; import '../../data/services/auth_service.dart'; import '../../data/services/board_service.dart'; import '../../data/services/profile_service.dart'; import '../../data/services/tenders_service.dart'; import '../../view_models/auth_view_model.dart'; /// Essential providers loaded at app startup /// Only includes infrastructure and auth List get essentialProviders { return [ ...cores, ...apiClients, ...repositories, ...services, ...authProvider, ]; } List get cores { return [ Provider( create: (context) { final nm = NetworkManager(context.read()); return nm; }, lazy: true, ), ChangeNotifierProvider(create: (context) => ThemeProvider(), lazy: true), ChangeNotifierProvider( create: (context) => NotificationStateService(), lazy: true, ), ChangeNotifierProvider( create: (context) => TabNavigationService(), lazy: true, ), ]; } List get apiClients { return [ Provider( create: (context) => AuthService(networkManager: context.read()), lazy: true, ), Provider( create: (context) => HomeService(networkManager: context.read()), lazy: true, ), Provider( create: (context) => TenderDetailService(networkManager: context.read()), lazy: true, ), Provider( create: (context) => YourTendersService(networkManager: context.read()), lazy: true, ), Provider( create: (context) => LikedTendersService(networkManager: context.read()), lazy: true, ), Provider( create: (context) => TendersService(networkManager: context.read()), lazy: true, ), Provider( create: (context) => ProfileService(networkManager: context.read()), lazy: true, ), Provider( create: (context) => NotificationsService(networkManager: context.read()), lazy: true, ), Provider( create: (context) => BoardService(networkManager: context.read()), lazy: true, ), Provider( create: (context) => CompanyAiService(networkManager: context.read()), lazy: true, ), ]; } List get repositories { return [ Provider( create: (context) => AuthRepository(authService: context.read()), lazy: true, ), Provider( create: (context) => YourTendersRepository( yourTendersService: context.read(), likedTendersService: context.read(), ), lazy: true, ), Provider( create: (context) => HomeRepository( homeService: context.read(), yourTendersService: context.read(), likedTendersService: context.read(), ), lazy: true, ), Provider( create: (context) => TenderDetailRepository(tenderDetailService: context.read()), lazy: true, ), Provider( create: (context) => LikedTendersRepository(likedTendersService: context.read()), lazy: true, ), Provider( create: (context) => TendersRepository(tendersService: context.read()), lazy: true, ), Provider( create: (context) => ProfileRepository(profileService: context.read()), lazy: true, ), Provider( create: (context) => NotificationsRepository(notificationsService: context.read()), lazy: true, ), Provider( create: (context) => BoardRepository(boardService: context.read()), lazy: true, ), Provider( create: (context) => CompanyAiRepository( companyAiService: context.read(), prefs: context.read(), ), lazy: true, ), ]; } List get services { return [ Provider( create: (context) => NotificationCheckService( homeRepository: context.read(), notificationStateService: context.read(), ), lazy: true, ), ]; } /// Auth ViewModel - only essential ViewModel loaded at startup List get authProvider { return [ ChangeNotifierProvider( create: (context) { final vm = AuthViewModel(authRepository: context.read()); // Hydrate stored user/customer so userRole is available on hot reloads vm.hydrateFromStorage(); return vm; }, lazy: false, // Load immediately for auth state checks ), ChangeNotifierProvider( create: (context) => FinalCompletionOfDocumentsViewModel(), lazy: false, // Load immediately for auth state checks ), ]; }