import 'package:flutter/material.dart';
import 'package:afterwork/presentation/screens/login/login_screen.dart';
import 'package:afterwork/presentation/screens/story/story_screen.dart';
import 'package:afterwork/presentation/screens/profile/profile_screen.dart';
import 'package:afterwork/presentation/screens/settings/settings_screen.dart';
import 'package:afterwork/presentation/screens/home/home_screen.dart';
import 'package:afterwork/presentation/screens/event/event_screen.dart';
import 'package:afterwork/data/datasources/event_remote_data_source.dart';
import '../presentation/reservations/reservations_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 {
  final EventRemoteDataSource eventRemoteDataSource;
  final String userId;
  final String userName;
  final String userLastName;

  /// 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], [userName], [userLastName] : Informations de l'utilisateur.
  AppRouter({
    required this.eventRemoteDataSource,
    required this.userId,
    required this.userName,
    required this.userLastName,
  }) {
    // Log d'initialisation avec les informations utilisateur
    debugPrint("[LOG] AppRouter initialisé avec les infos utilisateur : $userId, $userName, $userLastName");
  }

  /// Génère une route en fonction du [RouteSettings] fourni.
  ///
  /// Logue chaque navigation en fonction du nom de la route.
  Route<dynamic> 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,
            userName: userName,
            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,
            userName: userName,
            userLastName: userLastName,
          ),
        );

      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());

      default:
        debugPrint("[ERROR] Route non trouvée : ${settings.name}");
        return MaterialPageRoute(
          builder: (_) => const Scaffold(
            body: Center(
              child: Text('Page non trouvée'),
            ),
          ),
        );
    }
  }
}
