import 'package:shared_preferences/shared_preferences.dart'; import 'package:travel_mate/models/reminder_item.dart'; /// Persists dated reminders/to-dos per trip locally for offline use. class ReminderService { /// Loads reminders for [tripId]. Future> loadReminders(String tripId) async { final prefs = await SharedPreferences.getInstance(); final raw = prefs.getString(_key(tripId)); if (raw == null) return const []; try { return ReminderItem.decodeList(raw); } catch (_) { await prefs.remove(_key(tripId)); return const []; } } /// Saves full list. Future saveReminders( String tripId, List reminders, ) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_key(tripId), ReminderItem.encodeList(reminders)); } /// Adds a reminder. Future> addReminder( String tripId, ReminderItem reminder, ) async { final current = await loadReminders(tripId); final updated = [...current, reminder]; await saveReminders(tripId, updated); return updated; } /// Toggles done state. Future> toggleReminder( String tripId, String reminderId, ) async { final current = await loadReminders(tripId); final updated = current .map((r) => r.id == reminderId ? r.copyWith(isDone: !r.isDone) : r) .toList(growable: false); await saveReminders(tripId, updated); return updated; } /// Deletes a reminder. Future> deleteReminder( String tripId, String reminderId, ) async { final current = await loadReminders(tripId); final updated = current.where((r) => r.id != reminderId).toList(); await saveReminders(tripId, updated); return updated; } String _key(String tripId) => 'reminders_$tripId'; }