import 'package:flutter/material.dart'; import 'package:afterwork/data/models/event_model.dart'; import 'package:afterwork/data/datasources/event_remote_data_source.dart'; import 'event_card.dart'; import '../dialogs/add_event_dialog.dart'; /// Écran principal pour afficher les événements. class EventScreen extends StatefulWidget { final EventRemoteDataSource eventRemoteDataSource; final String userId; final String userName; // Nom de l'utilisateur final String userLastName; // Prénom de l'utilisateur const EventScreen({ Key? key, required this.eventRemoteDataSource, required this.userId, required this.userName, required this.userLastName, }) : super(key: key); @override _EventScreenState createState() => _EventScreenState(); } class _EventScreenState extends State { late Future> _eventsFuture; @override void initState() { super.initState(); // Récupérer la liste des événements à partir de la source de données distante _eventsFuture = widget.eventRemoteDataSource.getAllEvents(); } @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: () async { final eventData = await showDialog>( context: context, builder: (BuildContext context) { return AddEventDialog( userId: widget.userId, userName: widget.userName, userLastName: widget.userLastName, ); }, ); if (eventData != null) { try { print('Tentative de création d\'un nouvel événement par l\'utilisateur ${widget.userId}'); await widget.eventRemoteDataSource.createEvent(eventData as EventModel); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('Événement ajouté avec succès !')), ); // Réactualiser la liste des événements après création setState(() { _eventsFuture = widget.eventRemoteDataSource.getAllEvents(); }); } catch (e) { print('Erreur lors de la création de l\'événement: $e'); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Erreur : $e')), ); } } }, ), ], ), body: FutureBuilder>( future: _eventsFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { print('Erreur lors de la récupération des événements: ${snapshot.error}'); return Center(child: Text('Erreur: ${snapshot.error}')); } else if (!snapshot.hasData || snapshot.data!.isEmpty) { return const Center(child: Text('Aucun événement trouvé.')); } final events = snapshot.data!; print('Nombre d\'événements récupérés: ${events.length}'); return ListView.builder( padding: const EdgeInsets.all(16.0), itemCount: events.length, itemBuilder: (context, index) { final event = events[index]; print('Affichage de l\'événement ${event.id}'); return EventCard( key: ValueKey(event.id), eventRemoteDataSource: widget.eventRemoteDataSource, userId: widget.userId, eventId: event.id, userName: widget.userName, userLastName: widget.userLastName, profileImage: 'lib/assets/images/profile_picture.png', name: '${widget.userName} ${widget.userLastName}', eventCategory: event.category, datePosted: event.date, eventTitle: event.title, eventDescription: event.description, eventImageUrl: event.imageUrl ?? 'lib/assets/images/placeholder.png', eventStatus: event.status, reactionsCount: 120, // Exemple de valeur commentsCount: 45, // Exemple de valeur sharesCount: 30, // Exemple de valeur onReact: () { print('Réaction à l\'événement ${event.id}'); }, onComment: () { print('Commentaire sur l\'événement ${event.id}'); }, onShare: () { print('Partage de l\'événement ${event.id}'); }, onParticipate: () { print('Participation à l\'événement ${event.id}'); }, onCloseEvent: () => _onCloseEvent(context, event.id, index), onMoreOptions: () { print('Affichage des options pour l\'événement ${event.id}'); }, onReopenEvent: () => _onReopenEvent(context, event.id, index), ); }, ); }, ), backgroundColor: const Color(0xFF1E1E2C), ); } /// Logique pour fermer un événement void _onCloseEvent(BuildContext context, String eventId, int index) async { try { print('Tentative de fermeture de l\'événement $eventId'); // Appeler l'API pour fermer l'événement await widget.eventRemoteDataSource.closeEvent(eventId); print('Événement fermé avec succès'); // Montrer un message de succès AVANT de supprimer l'événement de la liste ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('L\'événement a été fermé avec succès.')), ); // Supprimez l'événement de la liste après avoir affiché le SnackBar setState(() { _eventsFuture = _eventsFuture.then((events) { events.removeAt(index); return events; }); }); } catch (e) { print('Erreur lors de la fermeture de l\'événement: $e'); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Erreur lors de la fermeture de l\'événement : $e')), ); } } /// Logique pour rouvrir un événement void _onReopenEvent(BuildContext context, String eventId, int index) async { try { print('Tentative de réouverture de l\'événement $eventId'); await widget.eventRemoteDataSource.reopenEvent(eventId); print('Événement rouvert avec succès'); // Montrer un message de succès ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('L\'événement a été rouvert avec succès.')), ); // Mettre à jour le statut de l'événement dans la liste des événements setState(() { _eventsFuture = _eventsFuture.then((events) { final updatedEvent = EventModel( id: events[index].id, title: events[index].title, description: events[index].description, date: events[index].date, location: events[index].location, category: events[index].category, link: events[index].link, imageUrl: events[index].imageUrl, creator: events[index].creator, participants: events[index].participants, status: 'OPEN', // Mettre à jour le statut à 'OPEN' ); // Remplacer l'événement dans la liste events[index] = updatedEvent; return events; }); }); } catch (e) { print('Erreur lors de la réouverture de l\'événement: $e'); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Erreur lors de la réouverture de l\'événement : $e')), ); } } }