import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../services/time_service.dart'; import '../models/time_registration.dart'; import 'auth_provider.dart'; // Time service provider final timeServiceProvider = Provider((ref) => TimeService()); // Active registration provider - henter pågående timeregistrering final activeRegistrationProvider = FutureProvider((ref) async { final user = ref.watch(currentUserProvider); if (user == null) return null; final timeService = ref.watch(timeServiceProvider); return timeService.getActiveRegistration(user.uid); }); // Today's registrations provider final todayRegistrationsProvider = StreamProvider>((ref) { final user = ref.watch(currentUserProvider); if (user == null) { return Stream.value([]); } final timeService = ref.watch(timeServiceProvider); final today = DateTime.now(); final startOfDay = DateTime(today.year, today.month, today.day); final endOfDay = DateTime(today.year, today.month, today.day, 23, 59, 59); return timeService.registrationsStream( userId: user.uid, startDate: startOfDay, endDate: endOfDay, ); }); // Registrations for date range provider final registrationsProvider = FutureProvider.family, DateRange>( (ref, dateRange) async { final user = ref.watch(currentUserProvider); if (user == null) return []; final timeService = ref.watch(timeServiceProvider); return timeService.getRegistrations( userId: user.uid, startDate: dateRange.start, endDate: dateRange.end, ); }, ); // Total hours for period provider final totalHoursProvider = FutureProvider.family, DateRange>( (ref, dateRange) async { final user = ref.watch(currentUserProvider); if (user == null) { return {'total': 0, 'ordinary': 0, 'overtime': 0}; } final timeService = ref.watch(timeServiceProvider); return timeService.calculateTotalHours( userId: user.uid, startDate: dateRange.start, endDate: dateRange.end, ); }, ); // Helper class for date ranges class DateRange { final DateTime start; final DateTime end; DateRange({required this.start, required this.end}); @override bool operator ==(Object other) => identical(this, other) || other is DateRange && runtimeType == other.runtimeType && start == other.start && end == other.end; @override int get hashCode => start.hashCode ^ end.hashCode; }