import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../brick/cache_warmer.dart'; import 'attendance_provider.dart'; class OfflineReadinessState { final bool hasWarmedOnce; final Map cacheCounts; final int pendingCheckIns; final int pendingUpdates; final int pendingPhotos; const OfflineReadinessState({ required this.hasWarmedOnce, required this.cacheCounts, required this.pendingCheckIns, required this.pendingUpdates, required this.pendingPhotos, }); bool get isReady { if (!hasWarmedOnce) return false; const critical = ['tasks', 'profiles', 'duty_schedules', 'attendance_logs']; return critical.every((t) => (cacheCounts[t] ?? -1) >= 0); } int get totalPending => pendingCheckIns + pendingUpdates; } final offlineReadinessProvider = FutureProvider.autoDispose((ref) async { final counts = await CacheWarmer.readCacheCounts(); final pendingCheckIns = ref.watch(offlinePendingCheckInsProvider).length; final pendingUpdatesMap = ref.watch(offlinePendingAttendanceUpdatesProvider); final pendingUpdates = pendingUpdatesMap.length; final pendingPhotos = pendingUpdatesMap.values .where((f) => f.containsKey('_local_photo_path')) .length; return OfflineReadinessState( hasWarmedOnce: CacheWarmer.hasWarmedOnce, cacheCounts: counts, pendingCheckIns: pendingCheckIns, pendingUpdates: pendingUpdates, pendingPhotos: pendingPhotos, ); });