import 'package:afterwork/presentation/screens/event/event_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../state_management/event_bloc.dart'; import '../dialogs/add_event_dialog.dart'; /// Écran principal des événements, affichant une liste d'événements. class EventScreen extends StatefulWidget { final String userId; final String userFirstName; final String userLastName; final String profileImageUrl; const EventScreen({ Key? key, required this.userId, required this.userFirstName, required this.userLastName, required this.profileImageUrl, }) : super(key: key); @override _EventScreenState createState() => _EventScreenState(); } class _EventScreenState extends State { @override void initState() { super.initState(); // Charger les événements lors de l'initialisation context.read().add(LoadEvents(widget.userId)); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text( 'Événements', style: TextStyle( color: Color(0xFF1DBF73), // Définit la couleur verte du texte ), ), backgroundColor: const Color(0xFF1E1E2C), actions: [ IconButton( icon: const Icon(Icons.add_circle_outline, size: 28, color: Color(0xFF1DBF73)), onPressed: () { // Naviguer vers une nouvelle page pour ajouter un événement Navigator.push( context, MaterialPageRoute( builder: (context) => AddEventPage( userId: widget.userId, userFirstName: widget.userFirstName, userLastName: widget.userLastName, ), ), ); }, ), ], ), body: BlocBuilder( builder: (context, state) { if (state is EventLoading) { print('[LOG] Chargement en cours des événements...'); return const Center(child: CircularProgressIndicator()); } else if (state is EventLoaded) { final events = state.events; print('[LOG] Nombre d\'événements à afficher: ${events.length}'); if (events.isEmpty) { return const Center(child: Text('Aucun événement disponible.')); } return ListView.builder( padding: const EdgeInsets.all(16.0), itemCount: events.length, itemBuilder: (context, index) { final event = events[index]; print('[LOG] Affichage de l\'événement $index : ${event.title}'); return EventCard( key: ValueKey(event.id), event: event, userId: widget.userId, userFirstName: widget.userFirstName, userLastName: widget.userLastName, profileImageUrl: widget.profileImageUrl, onReact: () => _onReact(event.id), onComment: () => _onComment(event.id), onShare: () => _onShare(event.id), onParticipate: () => _onParticipate(event.id), onCloseEvent: () => _onCloseEvent(event.id), onReopenEvent: () => _onReopenEvent(event.id), onRemoveEvent: (String eventId) { // Retirer l'événement localement après la fermeture setState(() { // Logique pour retirer l'événement de la liste localement // Par exemple, vous pouvez appeler le bloc ou mettre à jour l'état local ici context.read().add(RemoveEvent(eventId)); }); }, status: event.status, ); }, ); } else if (state is EventError) { print('[ERROR] Message d\'erreur: ${state.message}'); return Center(child: Text('Erreur: ${state.message}')); } return const Center(child: Text('Aucun événement disponible.')); }, ), backgroundColor: const Color(0xFF1E1E2C), floatingActionButton: FloatingActionButton( onPressed: () { // Recharger les événements context.read().add(LoadEvents(widget.userId)); }, backgroundColor: const Color(0xFF1DBF73), child: const Icon(Icons.refresh), ), ); } void _onReact(String eventId) { print('Réaction à l\'événement $eventId'); // Implémentez la logique pour réagir à un événement ici } void _onComment(String eventId) { print('Commentaire sur l\'événement $eventId'); // Implémentez la logique pour commenter un événement ici } void _onShare(String eventId) { print('Partage de l\'événement $eventId'); // Implémentez la logique pour partager un événement ici } void _onParticipate(String eventId) { print('Participation à l\'événement $eventId'); // Implémentez la logique pour participer à un événement ici } void _onCloseEvent(String eventId) { print('Fermeture de l\'événement $eventId'); // Appeler le bloc pour fermer l'événement sans recharger la liste entière. context.read().add(CloseEvent(eventId)); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('L\'événement a été fermé avec succès.')), ); } void _onReopenEvent(String eventId) { print('Réouverture de l\'événement $eventId'); // Appeler le bloc pour rouvrir l'événement sans recharger la liste entière. context.read().add(ReopenEvent(eventId)); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('L\'événement a été rouvert avec succès.')), ); } }