import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../auth/auth_providers.dart'; import 'group_ride_models.dart'; import 'group_ride_service.dart'; /// Provider for GroupRideService. final groupRideServiceProvider = Provider((ref) { return GroupRideService(); }); /// Stream of a specific Group Ride by ID. final groupRideStreamProvider = StreamProvider.family((ref, rideId) { final service = ref.watch(groupRideServiceProvider); return service.groupRideStream(rideId); }); /// Stream of participants for a specific Group Ride. final groupRideParticipantsProvider = StreamProvider.family, String>((ref, rideId) { final service = ref.watch(groupRideServiceProvider); return service.participantsStream(rideId); }); /// Stream of upcoming Group Rides for the current user. final upcomingGroupRidesProvider = StreamProvider>((ref) { final user = ref.watch(currentUserProvider); if (user == null || user.isAnonymous) { return Stream.value([]); } final service = ref.watch(groupRideServiceProvider); return service.upcomingRidesStream(callerUid: user.uid); }); /// Stream of live presence records for all participants in a specific Group Ride. final groupRideLivePresenceProvider = StreamProvider.family, String>((ref, rideId) { final service = ref.watch(groupRideServiceProvider); return service.livePresenceStream(rideId); }); /// Master privacy setting: whether group ride live location sharing is permitted by user. /// Defaults to false (explicit opt-in required). final groupRideLiveSharingAllowedProvider = StateProvider((ref) { return false; }); /// Active Group Ride ID currently being broadcasted to by the local rider, if any. final activeLiveRideSharingIdProvider = StateProvider((ref) { return null; });