/// Fahrzeug eines Subunternehmer-Accounts — Domain-Entity.
///
/// Im Gegensatz zum alten `lib/model/car.dart` (int-ID,
/// ERPframe-Welt) hält die neue Entity:
/// * `id` als UUID-String (Backend-Konvention),
/// * `accountId` als Personalnummer (für Audit/Cross-Check, ist
///   redundant zur JWT-Identität aber explizit im Payload),
/// * `active`-Flag (Soft-Delete statt physisches Löschen).
class Car {
  const Car({
    required this.id,
    required this.accountId,
    required this.plate,
    required this.active,
  });

  /// UUID des Fahrzeugs.
  final String id;

  /// Personalnummer des Account-Inhabers.
  final int accountId;

  /// Kennzeichen (z. B. "BGL-HZ 100").
  final String plate;

  /// Inaktive Fahrzeuge tauchen in `GET /me/cars` standardmäßig
  /// nicht auf — sie bleiben aber als FK-Anker für historische
  /// Audit-Einträge in der Datenbank.
  final bool active;

  Car copyWith({String? id, int? accountId, String? plate, bool? active}) {
    return Car(
      id: id ?? this.id,
      accountId: accountId ?? this.accountId,
      plate: plate ?? this.plate,
      active: active ?? this.active,
    );
  }

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is Car &&
          runtimeType == other.runtimeType &&
          id == other.id &&
          accountId == other.accountId &&
          plate == other.plate &&
          active == other.active;

  @override
  int get hashCode => Object.hash(id, accountId, plate, active);

  @override
  String toString() =>
      'Car(id: $id, accountId: $accountId, plate: $plate, active: $active)';
}
