/// Stammdatensatz für einen Artikel (Ware).
///
/// Der Domain-Artikel kennt — anders als das alte ERPframe-Modell — keine
/// Eltern-Kind-Beziehungen mehr. Stücklisten (BOM/Komponenten) werden im
/// neuen Backend als gleichrangige `DeliveryItem`s mit gesetztem
/// `komponentenArtikelNr` modelliert; der Treiber scannt einfach jedes Item
/// separat. Hier deshalb absichtlich kein `components`/`parent`-Feld.
class Article {
  const Article({
    required this.id,
    required this.articleNumber,
    required this.name,
    required this.scannable,
    this.defaultWarehouseId,
  });

  final String id;
  final String articleNumber;
  final String name;

  /// Nicht-scanbar = wird nicht über den Scanner durchgereicht (z. B.
  /// Dienstleistung, Versandkosten). In der Loading-Phase ausgeblendet.
  final bool scannable;

  /// Lager-Default für diesen Artikel; das tatsächlich relevante Lager pro
  /// Lieferung steht aber am `DeliveryItem.warehouseId`. Wird nur als
  /// UX-Hinweis verwendet.
  final String? defaultWarehouseId;

  Article copyWith({
    String? id,
    String? articleNumber,
    String? name,
    bool? scannable,
    String? defaultWarehouseId,
  }) {
    return Article(
      id: id ?? this.id,
      articleNumber: articleNumber ?? this.articleNumber,
      name: name ?? this.name,
      scannable: scannable ?? this.scannable,
      defaultWarehouseId: defaultWarehouseId ?? this.defaultWarehouseId,
    );
  }
}
