import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:relationship_saver/features/ai_digest/domain/ai_digest_models.dart'; import 'package:shared_preferences/shared_preferences.dart'; const String _enabledKey = 'llm_digest_enabled'; const String _preferredWeekdayKey = 'llm_digest_preferred_weekday'; const String _preferredHourKey = 'llm_digest_preferred_hour'; const String _requireWifiKey = 'llm_digest_require_wifi'; const String _requireChargingKey = 'llm_digest_require_charging'; const String _enableWebSearchKey = 'llm_digest_enable_web_search'; class LlmDigestConfigNotifier extends Notifier { Future? _initializeFuture; @override LlmDigestConfigState build() { return const LlmDigestConfigState(); } Future initialize() { _initializeFuture ??= _initializeFromStorage(); return _initializeFuture!; } Future _initializeFromStorage() async { final SharedPreferences prefs = await SharedPreferences.getInstance(); state = LlmDigestConfigState( enabled: prefs.getBool(_enabledKey) ?? false, preferredWeekday: prefs.getInt(_preferredWeekdayKey) ?? DateTime.sunday, preferredHour: prefs.getInt(_preferredHourKey) ?? 21, requireWifi: prefs.getBool(_requireWifiKey) ?? true, requireCharging: prefs.getBool(_requireChargingKey) ?? true, enableWebSearch: prefs.getBool(_enableWebSearchKey) ?? true, ); } Future setEnabled(bool enabled) async { final SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setBool(_enabledKey, enabled); state = state.copyWith(enabled: enabled); } Future setPreferredRunWindow({ required int weekday, required int hour, }) async { final int normalizedWeekday = weekday.clamp( DateTime.monday, DateTime.sunday, ); final int normalizedHour = hour.clamp(0, 23); final SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setInt(_preferredWeekdayKey, normalizedWeekday); await prefs.setInt(_preferredHourKey, normalizedHour); state = state.copyWith( preferredWeekday: normalizedWeekday, preferredHour: normalizedHour, ); } Future setNetworkPolicy({ required bool requireWifi, required bool requireCharging, }) async { final SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setBool(_requireWifiKey, requireWifi); await prefs.setBool(_requireChargingKey, requireCharging); state = state.copyWith( requireWifi: requireWifi, requireCharging: requireCharging, ); } Future setWebSearchEnabled(bool enabled) async { final SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setBool(_enableWebSearchKey, enabled); state = state.copyWith(enableWebSearch: enabled); } } final NotifierProvider llmDigestConfigProvider = NotifierProvider( LlmDigestConfigNotifier.new, );