import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:niogu_app/core/providers/app_provider.dart'; import 'package:niogu_app/features/outlets/data/repositories/outlet_repository_impl.dart'; import 'package:niogu_app/features/outlets/domain/entities/outlet.dart'; import 'package:niogu_app/features/outlets/domain/repositories/i_outlet_repository.dart'; import 'package:niogu_app/features/outlets/presentation/controllers/outlet_controller.dart'; import 'package:niogu_app/features/stock_in/domain/entities/stock_in_transfer.dart'; final outletRepositoryProvider = Provider((ref) { final appDatabase = ref.watch(appDatabaseProvider); return OutletRepositoryImpl(appDatabase); }); final userDeletedByOutletStreamProvider = StreamProvider.autoDispose>((ref) { final outletRepository = ref.watch(outletRepositoryProvider); return outletRepository.watchUserDeletedByOutlet(); }); final limitOutletStreamProvider = StreamProvider.autoDispose((ref) { final outletRepository = ref.watch(outletRepositoryProvider); return outletRepository.watchLimitOutlet(); }); final displayOutletStreamProvider = StreamProvider.autoDispose>((ref) { final outletRepository = ref.watch(outletRepositoryProvider); return outletRepository.watchDisplayOutlets(); }); final displayOutletEmptyProvider = Provider.autoDispose(( ref, ) { final displayOutletStreamAsync = ref.watch(displayOutletStreamProvider); if (displayOutletStreamAsync.isLoading) { return DisplayOutletEmpty.loading; } final allOutlets = displayOutletStreamAsync.value ?? []; if (allOutlets.isEmpty) { return DisplayOutletEmpty.empty_database; } return DisplayOutletEmpty.has_data; }); final staffAdminProvider = StreamProvider.family .autoDispose, String>((ref, outletId) { final outletRepository = ref.watch(outletRepositoryProvider); return outletRepository.watchStaffAdmins(outletId); }); final outletStreamProvider = StreamProvider.autoDispose>((ref) { final isLoggedIn = ref.watch(currentStatusLoginProvider); final outletRepository = ref.watch(outletRepositoryProvider); if(!isLoggedIn) { return Stream>.value([]); } return outletRepository.watchOutlets(); }); final mapOutletAddressProvider = StateProvider( (ref) => null, ); final sourceOutletStreamProvider = StreamProvider.family .autoDispose, bool>((ref, isShowAll) { final isLoggedIn = ref.watch(currentStatusLoginProvider); final outletRepository = ref.watch(outletRepositoryProvider); final currentOutletId = ref.watch(currentOutletIdProvider); if(!isLoggedIn) { return Stream>.value([]); } return outletRepository.watchSourceOutlets(currentOutletId!, isShowAll); }); final outletControllerProvider = AsyncNotifierProvider.autoDispose( OutletController.new, );