import 'package:flutter/material.dart'; import '../data/datasources/event_remote_data_source.dart'; import '../domain/entities/conversation.dart'; import '../presentation/reservations/reservations_screen.dart'; import '../presentation/screens/chat/chat_screen.dart'; import '../presentation/screens/chat/conversations_screen.dart'; import '../presentation/screens/event/event_screen.dart'; import '../presentation/screens/home/home_screen.dart'; import '../presentation/screens/login/login_screen.dart'; import '../presentation/screens/profile/profile_screen.dart'; import '../presentation/screens/settings/settings_screen.dart'; import '../presentation/screens/story/story_screen.dart'; /// [AppRouter] gère la navigation dans l'application. /// Chaque navigation est loguée pour assurer une traçabilité dans la console. class AppRouter { /// Constructeur de [AppRouter] initialisant les informations utilisateur /// et la source de données pour les événements. /// /// [eventRemoteDataSource] : Source de données pour les événements. /// [userId], [userFirstName], [userLastName] : Informations de l'utilisateur. AppRouter({ required this.eventRemoteDataSource, required this.userId, required this.userFirstName, required this.userLastName, }) { // Log d'initialisation avec les informations utilisateur debugPrint('[LOG] AppRouter initialisé avec les infos utilisateur : $userId, $userFirstName, $userLastName'); } final EventRemoteDataSource eventRemoteDataSource; final String userId; final String userFirstName; final String userLastName; /// Génère une route en fonction du [RouteSettings] fourni. /// /// Logue chaque navigation en fonction du nom de la route. Route generateRoute(RouteSettings settings) { // Log de la navigation vers la route debugPrint('[LOG] Navigation vers la route : ${settings.name}'); switch (settings.name) { case '/': debugPrint("[LOG] Chargement de l'écran de connexion"); return MaterialPageRoute(builder: (_) => const LoginScreen()); case '/home': debugPrint("[LOG] Chargement de l'écran d'accueil avec l'ID utilisateur : $userId"); return MaterialPageRoute( builder: (_) => HomeScreen( eventRemoteDataSource: eventRemoteDataSource, userId: userId, userFirstName: userFirstName, userLastName: userLastName, userProfileImage: 'lib/assets/images/profile_picture.png', ), ); case '/event': debugPrint("[LOG] Chargement de l'écran d'événement pour l'utilisateur : $userId"); return MaterialPageRoute( builder: (_) => EventScreen( userId: userId, userFirstName: userFirstName, userLastName: userLastName, profileImageUrl: '', ), ); case '/story': debugPrint("[LOG] Chargement de l'écran des histoires"); return MaterialPageRoute(builder: (_) => const StoryScreen()); case '/profile': debugPrint("[LOG] Chargement de l'écran du profil"); return MaterialPageRoute(builder: (_) => const ProfileScreen()); case '/settings': debugPrint("[LOG] Chargement de l'écran des paramètres"); return MaterialPageRoute(builder: (_) => const SettingsScreen()); case '/reservations': debugPrint("[LOG] Chargement de l'écran des réservations"); return MaterialPageRoute(builder: (_) => const ReservationsScreen()); case '/conversations': debugPrint("[LOG] Chargement de l'écran des conversations"); return MaterialPageRoute(builder: (_) => const ConversationsScreen()); case '/chat': debugPrint("[LOG] Chargement de l'écran de chat"); // Récupérer la conversation depuis les arguments final conversation = settings.arguments as Conversation?; if (conversation == null) { debugPrint("[ERROR] Conversation manquante pour la route /chat"); return MaterialPageRoute( builder: (_) => const Scaffold( body: Center( child: Text('Erreur: Conversation non spécifiée'), ), ), ); } return MaterialPageRoute( builder: (_) => ChatScreen(conversation: conversation), ); default: debugPrint('[ERROR] Route non trouvée : ${settings.name}'); return MaterialPageRoute( builder: (_) => const Scaffold( body: Center( child: Text('Page non trouvée'), ), ), ); } } }