import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:meta/meta.dart'; import 'package:afterwork/data/models/event_model.dart'; import 'package:afterwork/data/datasources/event_remote_data_source.dart'; // Déclaration des événements @immutable abstract class EventEvent {} class LoadEvents extends EventEvent { final String userId; LoadEvents(this.userId); } class AddEvent extends EventEvent { final EventModel event; AddEvent(this.event); } class CloseEvent extends EventEvent { final String eventId; CloseEvent(this.eventId); } class ReopenEvent extends EventEvent { final String eventId; ReopenEvent(this.eventId); } // Déclaration des états @immutable abstract class EventState {} class EventInitial extends EventState {} class EventLoading extends EventState {} class EventLoaded extends EventState { final List events; EventLoaded(this.events); } class EventError extends EventState { final String message; EventError(this.message); } // Bloc pour la gestion des événements class EventBloc extends Bloc { final EventRemoteDataSource remoteDataSource; EventBloc({required this.remoteDataSource}) : super(EventInitial()) { on(_onLoadEvents); on(_onAddEvent); on(_onCloseEvent); on(_onReopenEvent); } // Gestion du chargement des événements Future _onLoadEvents(LoadEvents event, Emitter emit) async { emit(EventLoading()); try { final events = await remoteDataSource.getAllEvents(); emit(EventLoaded(events)); } catch (e) { emit(EventError('Erreur lors du chargement des événements.')); } } // Gestion de l'ajout d'un nouvel événement Future _onAddEvent(AddEvent event, Emitter emit) async { emit(EventLoading()); try { await remoteDataSource.createEvent(event.event); final events = await remoteDataSource.getAllEvents(); emit(EventLoaded(events)); } catch (e) { emit(EventError('Erreur lors de l\'ajout de l\'événement.')); } } // Gestion de la fermeture d'un événement Future _onCloseEvent(CloseEvent event, Emitter emit) async { emit(EventLoading()); try { await remoteDataSource.closeEvent(event.eventId); final events = await remoteDataSource.getAllEvents(); emit(EventLoaded(events)); } catch (e) { emit(EventError('Erreur lors de la fermeture de l\'événement.')); } } // Gestion de la réouverture d'un événement Future _onReopenEvent(ReopenEvent event, Emitter emit) async { emit(EventLoading()); try { await remoteDataSource.reopenEvent(event.eventId); final events = await remoteDataSource.getAllEvents(); emit(EventLoaded(events)); } catch (e) { emit(EventError('Erreur lors de la réouverture de l\'événement.')); } } }