import 'package:equatable/equatable.dart'; import '../../../../core/models/evenement_model.dart'; /// États du BLoC Evenement abstract class EvenementState extends Equatable { const EvenementState(); @override List get props => []; } /// État initial class EvenementInitial extends EvenementState { const EvenementInitial(); } /// État de chargement class EvenementLoading extends EvenementState { const EvenementLoading(); } /// État de chargement avec données existantes (pour pagination) class EvenementLoadingMore extends EvenementState { final List evenements; const EvenementLoadingMore(this.evenements); @override List get props => [evenements]; } /// État de succès avec liste d'événements class EvenementLoaded extends EvenementState { final List evenements; final bool hasReachedMax; final int currentPage; final String? searchTerm; final TypeEvenement? filterType; const EvenementLoaded({ required this.evenements, this.hasReachedMax = false, this.currentPage = 0, this.searchTerm, this.filterType, }); EvenementLoaded copyWith({ List? evenements, bool? hasReachedMax, int? currentPage, String? searchTerm, TypeEvenement? filterType, }) { return EvenementLoaded( evenements: evenements ?? this.evenements, hasReachedMax: hasReachedMax ?? this.hasReachedMax, currentPage: currentPage ?? this.currentPage, searchTerm: searchTerm ?? this.searchTerm, filterType: filterType ?? this.filterType, ); } @override List get props => [ evenements, hasReachedMax, currentPage, searchTerm, filterType, ]; } /// État de succès avec un événement spécifique class EvenementDetailLoaded extends EvenementState { final EvenementModel evenement; const EvenementDetailLoaded(this.evenement); @override List get props => [evenement]; } /// État de succès avec statistiques class EvenementStatistiquesLoaded extends EvenementState { final Map statistiques; const EvenementStatistiquesLoaded(this.statistiques); @override List get props => [statistiques]; } /// État de succès après création/modification class EvenementOperationSuccess extends EvenementState { final String message; final EvenementModel? evenement; const EvenementOperationSuccess({ required this.message, this.evenement, }); @override List get props => [message, evenement]; } /// État d'erreur class EvenementError extends EvenementState { final String message; final List? evenements; // Pour conserver les données en cas d'erreur de pagination const EvenementError({ required this.message, this.evenements, }); @override List get props => [message, evenements]; } /// État de recherche vide class EvenementSearchEmpty extends EvenementState { final String searchTerm; const EvenementSearchEmpty(this.searchTerm); @override List get props => [searchTerm]; } /// État de liste vide class EvenementEmpty extends EvenementState { final String message; const EvenementEmpty({ this.message = 'Aucun événement trouvé', }); @override List get props => [message]; }