/// Modèle pour suivre l'état du chargement des données
class LoadingState {
  /// Progression globale (0.0 à 1.0)
  final double progress;

  /// Description de l'étape en cours
  final String? stepDescription;

  /// Message principal
  final String? message;

  /// Indique si le chargement est terminé
  final bool isCompleted;

  /// Indique si une erreur s'est produite
  final bool hasError;

  /// Message d'erreur éventuel
  final String? errorMessage;

  const LoadingState({
    this.progress = 0.0,
    this.stepDescription,
    this.message,
    this.isCompleted = false,
    this.hasError = false,
    this.errorMessage,
  });

  /// Crée un nouvel état de chargement avec les valeurs mises à jour
  LoadingState copyWith({
    double? progress,
    String? stepDescription,
    String? message,
    bool? isCompleted,
    bool? hasError,
    String? errorMessage,
  }) {
    return LoadingState(
      progress: progress ?? this.progress,
      stepDescription: stepDescription ?? this.stepDescription,
      message: message ?? this.message,
      isCompleted: isCompleted ?? this.isCompleted,
      hasError: hasError ?? this.hasError,
      errorMessage: errorMessage ?? this.errorMessage,
    );
  }

  /// État initial du chargement
  static const initial = LoadingState(
    progress: 0.0,
    message: 'Chargement en cours...',
    isCompleted: false,
    hasError: false,
  );

  /// État de chargement terminé avec succès
  static const completed = LoadingState(
    progress: 1.0,
    message: 'Chargement terminé',
    isCompleted: true,
    hasError: false,
  );

  /// Crée un état d'erreur
  static LoadingState error(String message) {
    return LoadingState(
      progress: 0.0,
      message: 'Erreur de chargement',
      errorMessage: message,
      isCompleted: true,
      hasError: true,
    );
  }
}
