import 'package:shared_preferences/shared_preferences.dart'; import 'package:travel_mate/models/emergency_contact.dart'; /// Stores emergency contacts per trip for offline access. /// /// Data is persisted locally in `SharedPreferences` under the key /// `emergency_`. Corrupted payloads are cleaned up automatically to /// avoid crashing the UI during critical usage. class EmergencyService { /// Loads contacts for [tripId]. Returns an empty list if none or corrupted. Future> loadContacts(String tripId) async { final prefs = await SharedPreferences.getInstance(); final raw = prefs.getString(_key(tripId)); if (raw == null) return const []; try { return EmergencyContact.decodeList(raw); } catch (_) { await prefs.remove(_key(tripId)); return const []; } } /// Saves the complete contact list. Future saveContacts( String tripId, List contacts, ) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_key(tripId), EmergencyContact.encodeList(contacts)); } /// Adds a contact and returns updated list. Future> addContact( String tripId, EmergencyContact contact, ) async { final current = await loadContacts(tripId); final updated = [...current, contact]; await saveContacts(tripId, updated); return updated; } /// Deletes a contact. Future> deleteContact( String tripId, String contactId, ) async { final current = await loadContacts(tripId); final updated = current.where((c) => c.id != contactId).toList(); await saveContacts(tripId, updated); return updated; } String _key(String tripId) => 'emergency_$tripId'; }