import 'package:shared_preferences/shared_preferences.dart'; import 'package:travel_mate/models/transport_segment.dart'; /// Service that stores per-trip transport segments locally for offline access. /// /// Uses `SharedPreferences` keyed by `trip_transport_` to keep /// creation/edit quick without round-trips. Real-time status can later be /// updated by a background job hitting external APIs. class TransportService { /// Loads stored transport segments for [tripId]. Future> loadSegments(String tripId) async { final prefs = await SharedPreferences.getInstance(); final raw = prefs.getString(_key(tripId)); if (raw == null) return const []; try { return TransportSegment.decodeList(raw); } catch (_) { await prefs.remove(_key(tripId)); return const []; } } /// Persists the full list of segments for [tripId]. Future saveSegments( String tripId, List segments, ) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_key(tripId), TransportSegment.encodeList(segments)); } /// Adds a segment entry. Future> addSegment( String tripId, TransportSegment segment, ) async { final current = await loadSegments(tripId); final updated = [...current, segment]; await saveSegments(tripId, updated); return updated; } /// Deletes a segment by [segmentId]. Future> deleteSegment( String tripId, String segmentId, ) async { final current = await loadSegments(tripId); final updated = current.where((s) => s.id != segmentId).toList(); await saveSegments(tripId, updated); return updated; } /// Updates the status of a segment (e.g., delayed/boarding/in_air). Future> updateStatus( String tripId, String segmentId, String status, ) async { final current = await loadSegments(tripId); final updated = current .map((s) { if (s.id != segmentId) return s; return s.copyWith(status: status); }) .toList(growable: false); await saveSegments(tripId, updated); return updated; } String _key(String tripId) => 'trip_transport_$tripId'; }