import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/cache/cache_service.dart'; import '../../core/cache/image_cache_service.dart'; import '../../core/database/app_database.dart'; import '../../core/database/database_service.dart'; import '../../core/http/network_info.dart'; import '../providers/provider_factory.dart'; import '../providers/provider_manager.dart'; import '../repositories/collection_repository.dart'; import '../repositories/favorite_repository.dart'; import '../repositories/post_repository.dart'; import '../repositories/provider_repository.dart'; import '../repositories/search_repository.dart'; import '../services/collection_service.dart'; import '../services/download_service.dart'; import '../services/favorite_service.dart'; import '../services/feed_service.dart'; import '../services/provider_check_service.dart'; import '../services/search_service.dart'; import '../services/settings_service.dart'; final appDatabaseProvider = FutureProvider((ref) async { final database = await AppDatabase.open(); ref.onDispose(database.close); return database; }); final databaseServiceProvider = Provider((ref) { final database = ref.watch(appDatabaseProvider).requireValue; return DatabaseService(database); }); final connectivityProvider = Provider((ref) => Connectivity()); final networkInfoProvider = Provider((ref) { return NetworkInfo(ref.watch(connectivityProvider)); }); final providerFactoryProvider = Provider((ref) { return ProviderFactory(); }); final postRepositoryProvider = Provider((ref) { return PostRepository(ref.watch(databaseServiceProvider)); }); final providerRepositoryProvider = Provider((ref) { return ProviderRepository(ref.watch(databaseServiceProvider)); }); final searchRepositoryProvider = Provider((ref) { return SearchRepository(ref.watch(databaseServiceProvider)); }); final favoriteRepositoryProvider = Provider((ref) { return FavoriteRepository( ref.watch(databaseServiceProvider), ref.watch(postRepositoryProvider), ); }); final collectionRepositoryProvider = Provider((ref) { return CollectionRepository( ref.watch(databaseServiceProvider), ref.watch(postRepositoryProvider), ); }); final cacheServiceProvider = Provider((ref) { return CacheService(ref.watch(databaseServiceProvider)); }); final imageCacheServiceProvider = Provider((ref) { return ImageCacheService(); }); final providerManagerProvider = Provider((ref) { return ProviderManager( ref.watch(providerRepositoryProvider), ref.watch(providerFactoryProvider), ); }); final feedServiceProvider = Provider((ref) { return FeedService( ref.watch(providerManagerProvider), ref.watch(cacheServiceProvider), ref.watch(settingsServiceProvider), ); }); final searchServiceProvider = Provider((ref) { return SearchService( ref.watch(searchRepositoryProvider), ref.watch(providerManagerProvider), ); }); final providerCheckServiceProvider = Provider((ref) { return ProviderCheckService( ref.watch(providerRepositoryProvider), ref.watch(providerFactoryProvider), ref.watch(providerManagerProvider), ); }); final favoriteServiceProvider = Provider((ref) { return FavoriteService( ref.watch(favoriteRepositoryProvider), ref.watch(postRepositoryProvider), ); }); final collectionServiceProvider = Provider((ref) { return CollectionService(ref.watch(collectionRepositoryProvider)); }); final settingsServiceProvider = Provider((ref) { return SettingsService( ref.watch(databaseServiceProvider), providerRepository: ref.watch(providerRepositoryProvider), ); }); final downloadServiceProvider = Provider((ref) { return DownloadService(); });