import 'package:hl_lieferservice/feature/delivery/model/delivery_phase.dart';

abstract class PhaseEvent {}

/// Lädt (falls noch nicht geschehen) die persistierte Phase für ein Fahrzeug
/// und emittiert sie. Falls nichts persistiert ist, ermittelt der
/// [PhaseBloc] die Eintrittsphase abhängig von der Anzahl der Team-
/// Fahrzeuge:
/// * 1 Auto   → [DeliveryPhase.sortieren]
/// * ≥2 Autos → [DeliveryPhase.auswaehlen]
class PhaseLoadForCar extends PhaseEvent {
  final String carId;

  PhaseLoadForCar({required this.carId});
}

/// Explizites Setzen einer Phase für ein Fahrzeug — wird sowohl beim
/// Sprung über den Stepper als auch nach automatischem Phasen-Wechsel
/// (z. B. Sortierung bestätigt → beladen) aufgerufen. Persistiert.
class PhaseSet extends PhaseEvent {
  final String carId;
  final DeliveryPhase phase;

  PhaseSet({required this.carId, required this.phase});
}

/// Setzt die Phase für ein Fahrzeug, ohne sie zu persistieren. Wird intern
/// nach einem Load verwendet, da die Quelle bereits SharedPreferences ist.
/// [maxPhase] ist die höchste am Tag erreichte Phase aus der Persistenz —
/// fällt sie weg, wird die aktuelle [phase] als Max angenommen.
class PhaseLoaded extends PhaseEvent {
  final String carId;
  final DeliveryPhase phase;
  final DeliveryPhase maxPhase;

  PhaseLoaded({
    required this.carId,
    required this.phase,
    required this.maxPhase,
  });
}
