import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'road_alert_models.dart'; import 'road_alert_provider_interface.dart'; import 'tomtom_road_alert_provider.dart'; import 'local_road_alert_provider.dart'; final tomtomProviderInstance = Provider((ref) { return TomTomRoadAlertProvider(); }); final localProviderInstance = Provider((ref) { return LocalRoadAlertProvider(); }); // Master Enable class RoadAlertsEnabledNotifier extends StateNotifier { static const _key = 'road_alerts_enabled'; RoadAlertsEnabledNotifier() : super(true) { _load(); } Future _load() async { final prefs = await SharedPreferences.getInstance(); state = prefs.getBool(_key) ?? true; } Future setEnabled(bool enabled) async { state = enabled; final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_key, enabled); } } final roadAlertsEnabledProvider = StateNotifierProvider((ref) { return RoadAlertsEnabledNotifier(); }); // Audio Alerts Toggle class AudioAlertsEnabledNotifier extends StateNotifier { static const _key = 'audio_alerts_enabled'; AudioAlertsEnabledNotifier() : super(true) { _load(); } Future _load() async { final prefs = await SharedPreferences.getInstance(); state = prefs.getBool(_key) ?? true; } Future setEnabled(bool enabled) async { state = enabled; final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_key, enabled); } } final audioAlertsEnabledProvider = StateNotifierProvider((ref) { return AudioAlertsEnabledNotifier(); }); // Alert Radius in Meters (500ft = 152.4m, 1000ft = 304.8m, 0.25mi = 402.3m, 0.5mi = 804.7m, 1mi = 1609.3m) class AlertRadiusMetersNotifier extends StateNotifier { static const _key = 'alert_radius_meters'; AlertRadiusMetersNotifier() : super(804.7) { _load(); } Future _load() async { final prefs = await SharedPreferences.getInstance(); state = prefs.getDouble(_key) ?? 804.7; } Future setRadius(double radiusMeters) async { state = radiusMeters; final prefs = await SharedPreferences.getInstance(); await prefs.setDouble(_key, radiusMeters); } } final alertRadiusMetersProvider = StateNotifierProvider((ref) { return AlertRadiusMetersNotifier(); }); // TomTom API Key class TomTomApiKeyNotifier extends StateNotifier { static const _key = 'tomtom_api_key'; TomTomApiKeyNotifier() : super('') { _load(); } Future _load() async { final prefs = await SharedPreferences.getInstance(); state = prefs.getString(_key) ?? ''; } Future setApiKey(String apiKey) async { state = apiKey.trim(); final prefs = await SharedPreferences.getInstance(); await prefs.setString(_key, state); } } final tomtomApiKeyProvider = StateNotifierProvider((ref) { return TomTomApiKeyNotifier(); }); // TomTom Connection Status final tomtomStatusProvider = StateProvider((ref) { final key = ref.watch(tomtomApiKeyProvider); if (key.isEmpty) { return RoadAlertProviderStatus.notConfigured; } return RoadAlertProviderStatus.configured; }); // Active Providers List final activeRoadAlertProviders = Provider>((ref) { final tomtomKey = ref.watch(tomtomApiKeyProvider); final list = []; if (tomtomKey.isNotEmpty) { list.add(ref.watch(tomtomProviderInstance)); } // Include demo local provider as fallback/demo list.add(ref.watch(localProviderInstance)); return list; });