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<void> save(String carId, String token, DeliveryPhase phase) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString(_key(carId, token), phase.persistenceKey);
  }

  Future<DeliveryPhase?> load(String carId, String token) async {
    final prefs = await SharedPreferences.getInstance();
    return DeliveryPhaseExtension.fromPersistenceKey(
      prefs.getString(_key(carId, token)),
    );
  }

  Future<void> saveMax(String carId, String token, DeliveryPhase phase) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString(_maxKey(carId, token), phase.persistenceKey);
  }

  Future<DeliveryPhase?> loadMax(String carId, String token) async {
    final prefs = await SharedPreferences.getInstance();
    return DeliveryPhaseExtension.fromPersistenceKey(
      prefs.getString(_maxKey(carId, token)),
    );
  }
}
