import 'package:em2rp/providers/local_user_provider.dart'; import 'package:em2rp/providers/event_provider.dart'; import 'package:flutter/material.dart'; import 'package:em2rp/widgets/custom_app_bar.dart'; import 'package:em2rp/views/widgets/nav/main_drawer.dart'; import 'package:provider/provider.dart'; import 'package:table_calendar/table_calendar.dart'; import 'package:em2rp/models/event_model.dart'; import 'package:em2rp/widgets/event_details.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:em2rp/views/widgets/calendar_widgets/month_view.dart'; import 'package:em2rp/views/widgets/calendar_widgets/week_view.dart'; class CalendarPage extends StatefulWidget { const CalendarPage({super.key}); @override State createState() => _CalendarPageState(); } class _CalendarPageState extends State { CalendarFormat _calendarFormat = CalendarFormat.month; DateTime _focusedDay = DateTime.now(); DateTime? _selectedDay; EventModel? _selectedEvent; @override void initState() { super.initState(); initializeDateFormatting('fr_FR', null); Future.microtask(() => _loadEvents()); } Future _loadEvents() async { final localAuthProvider = Provider.of(context, listen: false); final eventProvider = Provider.of(context, listen: false); final userId = localAuthProvider.uid; if (userId != null) { await eventProvider.loadUserEvents(userId); } } void _changeWeek(int delta) { setState(() { _focusedDay = _focusedDay.add(Duration(days: 7 * delta)); }); } @override Widget build(BuildContext context) { final eventProvider = Provider.of(context); final isMobile = MediaQuery.of(context).size.width < 600; if (eventProvider.isLoading) { return const Scaffold( body: Center( child: CircularProgressIndicator(), ), ); } return Scaffold( appBar: const CustomAppBar( title: 'Calendrier', ), drawer: const MainDrawer(currentPage: '/calendar'), body: isMobile ? _buildMobileLayout() : _buildDesktopLayout(), ); } Widget _buildDesktopLayout() { final eventProvider = Provider.of(context); return Row( children: [ // Calendrier (65% de la largeur) Expanded( flex: 65, child: _buildCalendar(), ), // Détails de l'événement (35% de la largeur) Expanded( flex: 35, child: _selectedEvent != null ? EventDetails( event: _selectedEvent!, selectedDate: _selectedDay, events: eventProvider.events, onSelectEvent: (event, date) { setState(() { _selectedEvent = event; _selectedDay = date; }); }, ) : const Center( child: Text('Sélectionnez un événement pour voir les détails'), ), ), ], ); } Widget _buildMobileLayout() { final eventProvider = Provider.of(context); return Column( children: [ // Calendrier Expanded( child: _buildCalendar(), ), // Détails de l'événement if (_selectedEvent != null) Expanded( child: EventDetails( event: _selectedEvent!, selectedDate: _selectedDay, events: eventProvider.events, onSelectEvent: (event, date) { setState(() { _selectedEvent = event; _selectedDay = date; }); }, ), ), ], ); } Widget _buildCalendar() { final eventProvider = Provider.of(context); if (_calendarFormat == CalendarFormat.week) { return WeekView( focusedDay: _focusedDay, events: eventProvider.events, onWeekChange: _changeWeek, onEventSelected: (event) { setState(() { _selectedEvent = event; }); }, onSwitchToMonth: () { setState(() { _calendarFormat = CalendarFormat.month; }); }, ); } else { return MonthView( focusedDay: _focusedDay, selectedDay: _selectedDay, calendarFormat: _calendarFormat, events: eventProvider.events, onDaySelected: (selectedDay, focusedDay) { setState(() { _selectedDay = selectedDay; _focusedDay = focusedDay; }); }, onFormatChanged: (format) { setState(() { _calendarFormat = format; }); }, onPageChanged: (focusedDay) { setState(() { _focusedDay = focusedDay; }); }, onEventSelected: (event) { setState(() { _selectedEvent = event; }); }, ); } } }