/// Résultat du traitement d'un code QR ou saisi manuellement
class QRCodeProcessResult {
  /// Indique si le traitement a réussi
  final bool success;

  /// Message descriptif du résultat
  final String? message;

  /// Liste des IDs d'équipements affectés par le traitement
  final List<String> affectedEquipmentIds;

  /// Mises à jour des états de validation (équipements cochés)
  final Map<String, bool>? updatedValidationState;

  /// Mises à jour des quantités actuelles
  final Map<String, int>? updatedQuantities;

  /// Indique si le code n'a pas été trouvé dans l'événement actuel
  /// (utilisé pour proposer de l'ajouter depuis la BDD)
  final bool codeNotFoundInEvent;

  const QRCodeProcessResult({
    required this.success,
    this.message,
    this.affectedEquipmentIds = const [],
    this.updatedValidationState,
    this.updatedQuantities,
    this.codeNotFoundInEvent = false,
  });

  /// Crée un résultat de succès
  factory QRCodeProcessResult.success({
    required String message,
    required List<String> affectedEquipmentIds,
    Map<String, bool>? updatedValidationState,
    Map<String, int>? updatedQuantities,
  }) {
    return QRCodeProcessResult(
      success: true,
      message: message,
      affectedEquipmentIds: affectedEquipmentIds,
      updatedValidationState: updatedValidationState,
      updatedQuantities: updatedQuantities,
    );
  }

  /// Crée un résultat d'erreur
  factory QRCodeProcessResult.error(String message) {
    return QRCodeProcessResult(
      success: false,
      message: message,
    );
  }

  /// Crée un résultat indiquant que le code n'est pas dans l'événement
  factory QRCodeProcessResult.notFoundInEvent(String code) {
    return QRCodeProcessResult(
      success: false,
      message: 'Code $code non trouvé dans cet événement',
      codeNotFoundInEvent: true,
    );
  }
}
