import 'package:hl_lieferservice/feature/delivery/model/delivery_phase.dart'; import 'package:shared_preferences/shared_preferences.dart'; /// Persistiert die aktuelle Phase pro Fahrzeug. /// /// Der Key ist an einen **Tour-Token** gebunden (abgeleitet aus /// `Tour.syncedAt`) statt nur an das Datum. Vorteile: /// /// * Ein erneuter ERP-Sync / Demo-Seed schreibt eine neue `syncedAt` → neuer /// Token → die Phasen (inkl. der „erledigt"-Häkchen im Stepper) starten /// frisch. So bleibt ein „Daten-Reset" im Backend nicht an alten lokalen /// Häkchen hängen. /// * Eine Tour von heute hat heutiges `syncedAt` — die Tagesbindung ist /// damit implizit (am nächsten Tag gibt es ohnehin eine neue Tour). /// * Bloßes Weiterscannen (Item-Status) ändert `syncedAt` nicht → der /// Fahrer-Fortschritt bleibt über App-Neustarts derselben Tour erhalten. /// /// Zusätzlich wird die **höchste erreichte Phase** pro Fahrzeug persistiert /// (Key-Suffix `_max`). Der Stepper nutzt das, um Vorwärts-Sprünge auf /// bereits besuchte Phasen zu erlauben — auch nach einem Rücksprung. class PhaseService { static const _prefix = "delivery_phase"; String _key(String carId, String token) => "${_prefix}_${token}_$carId"; String _maxKey(String carId, String token) => "${_prefix}_max_${token}_$carId"; Future save(String carId, String token, DeliveryPhase phase) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_key(carId, token), phase.persistenceKey); } Future load(String carId, String token) async { final prefs = await SharedPreferences.getInstance(); return DeliveryPhaseExtension.fromPersistenceKey( prefs.getString(_key(carId, token)), ); } Future saveMax(String carId, String token, DeliveryPhase phase) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_maxKey(carId, token), phase.persistenceKey); } Future loadMax(String carId, String token) async { final prefs = await SharedPreferences.getInstance(); return DeliveryPhaseExtension.fromPersistenceKey( prefs.getString(_maxKey(carId, token)), ); } }