import 'package:hl_lieferservice/feature/cars/model/selection.dart';
import 'package:shared_preferences/shared_preferences.dart';

/// Persistiert die Tagesfahrzeug-Auswahl lokal auf dem Gerät pro
/// Account. Nach der Backend-Migration sind die Car-IDs UUIDs
/// (Strings). Alte Pre-Phase-D-Installations können noch int-Werte
/// unter `_car_id` liegen haben — die werden beim Lesen
/// stillschweigend ignoriert (Migration durch "neu auswählen").
class CarSelectionRepository {
  static String _keyDate(String userId) => 'car_selection_${userId}_date';
  static String _keyCarId(String userId) => 'car_selection_${userId}_car_id';
  static String _keyCarPlate(String userId) =>
      'car_selection_${userId}_car_plate';

  Future<CarSelection?> getSelection(String userId) async {
    final prefs = await SharedPreferences.getInstance();

    final dateString = prefs.getString(_keyDate(userId));
    final plate = prefs.getString(_keyCarPlate(userId));

    // Versuche zuerst die neue String-Variante. Falls noch ein altes
    // int unter dem Key liegt (pre-Migration), wirft getString —
    // dann beste Strategie: alte Daten droppen, Re-Auswahl erzwingen.
    String? carId;
    try {
      carId = prefs.getString(_keyCarId(userId));
    } catch (_) {
      await prefs.remove(_keyCarId(userId));
      carId = null;
    }

    if (dateString == null || carId == null || plate == null) return null;

    return CarSelection(
      date: DateTime.parse(dateString),
      selectedCarId: carId,
      selectedCarPlate: plate,
    );
  }

  Future<void> saveSelection(String userId, CarSelection selection) async {
    final prefs = await SharedPreferences.getInstance();

    await prefs.setString(_keyDate(userId), selection.date.toIso8601String());
    await prefs.setString(_keyCarId(userId), selection.selectedCarId!);
    await prefs.setString(_keyCarPlate(userId), selection.selectedCarPlate!);
  }
}
