import 'package:equatable/equatable.dart'; import '../../../../core/models/membre_model.dart'; import '../../../../core/errors/failures.dart'; /// États pour le BLoC des membres abstract class MembresState extends Equatable { const MembresState(); @override List get props => []; } /// État initial class MembresInitial extends MembresState { const MembresInitial(); } /// État de chargement class MembresLoading extends MembresState { const MembresLoading(); } /// État de chargement avec données existantes (pour le refresh) class MembresRefreshing extends MembresState { const MembresRefreshing(this.currentMembres); final List currentMembres; @override List get props => [currentMembres]; } /// État de succès avec liste des membres class MembresLoaded extends MembresState { const MembresLoaded({ required this.membres, this.isSearchResult = false, this.searchQuery, }); final List membres; final bool isSearchResult; final String? searchQuery; @override List get props => [membres, isSearchResult, searchQuery]; /// Copie avec modifications MembresLoaded copyWith({ List? membres, bool? isSearchResult, String? searchQuery, }) { return MembresLoaded( membres: membres ?? this.membres, isSearchResult: isSearchResult ?? this.isSearchResult, searchQuery: searchQuery ?? this.searchQuery, ); } } /// État de succès pour un membre spécifique class MembreDetailLoaded extends MembresState { const MembreDetailLoaded(this.membre); final MembreModel membre; @override List get props => [membre]; } /// État de succès pour les statistiques class MembresStatsLoaded extends MembresState { const MembresStatsLoaded(this.stats); final Map stats; @override List get props => [stats]; } /// État de succès pour la création d'un membre class MembreCreated extends MembresState { const MembreCreated(this.membre); final MembreModel membre; @override List get props => [membre]; } /// État de succès pour la mise à jour d'un membre class MembreUpdated extends MembresState { const MembreUpdated(this.membre); final MembreModel membre; @override List get props => [membre]; } /// État de succès pour la suppression d'un membre class MembreDeleted extends MembresState { const MembreDeleted(this.membreId); final String membreId; @override List get props => [membreId]; } /// État d'erreur class MembresError extends MembresState { const MembresError({ required this.failure, this.previousState, }); final Failure failure; final MembresState? previousState; @override List get props => [failure, previousState]; /// Message d'erreur formaté String get message => failure.message; /// Code d'erreur String? get code => failure.code; /// Indique si c'est une erreur réseau bool get isNetworkError => failure is NetworkFailure; /// Indique si c'est une erreur serveur bool get isServerError => failure is ServerFailure; /// Indique si c'est une erreur d'authentification bool get isAuthError => failure is AuthFailure; /// Indique si c'est une erreur de validation bool get isValidationError => failure is ValidationFailure; } /// État d'erreur avec données existantes (pour les erreurs non critiques) class MembresErrorWithData extends MembresState { const MembresErrorWithData({ required this.failure, required this.membres, this.isSearchResult = false, this.searchQuery, }); final Failure failure; final List membres; final bool isSearchResult; final String? searchQuery; @override List get props => [failure, membres, isSearchResult, searchQuery]; /// Message d'erreur formaté String get message => failure.message; }