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 datumsspezifisch, /// damit ein App-Neustart am nächsten Tag automatisch wieder mit Phase 1 /// (Sortieren) startet — die Phase eines Vortags hat keine Bedeutung mehr. /// /// Zusätzlich wird die **höchste am Tag erreichte Phase** pro Fahrzeug /// persistiert (eigener Key-Suffix `_max`). Der Stepper nutzt diesen Wert, /// um Vorwärts-Sprünge auf bereits besuchte Phasen zu erlauben — auch wenn /// der Fahrer zwischenzeitlich zurückgesprungen ist. class PhaseService { static const _prefix = "delivery_phase"; String _key(String carId) { final now = DateTime.now(); final date = "${now.year}_${now.month}_${now.day}"; return "${_prefix}_${date}_$carId"; } String _maxKey(String carId) { final now = DateTime.now(); final date = "${now.year}_${now.month}_${now.day}"; return "${_prefix}_max_${date}_$carId"; } Future save(String carId, DeliveryPhase phase) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_key(carId), phase.persistenceKey); } Future load(String carId) async { final prefs = await SharedPreferences.getInstance(); return DeliveryPhaseExtension.fromPersistenceKey(prefs.getString(_key(carId))); } Future saveMax(String carId, DeliveryPhase phase) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_maxKey(carId), phase.persistenceKey); } Future loadMax(String carId) async { final prefs = await SharedPreferences.getInstance(); return DeliveryPhaseExtension.fromPersistenceKey( prefs.getString(_maxKey(carId)), ); } Future> loadAll(Iterable carIds) async { final result = {}; for (final carId in carIds) { final phase = await load(carId); if (phase != null) result[carId] = phase; } return result; } }