import 'package:flutter/material.dart';
import 'package:geosector_app/presentation/widgets/dashboard_app_bar.dart';
import 'package:geosector_app/presentation/widgets/responsive_navigation.dart';
import 'package:geosector_app/core/theme/app_theme.dart'; // Pour les couleurs du thème

/// Layout commun pour les tableaux de bord utilisateur et administrateur
/// Combine DashboardAppBar et ResponsiveNavigation
class DashboardLayout extends StatelessWidget {
  /// Le contenu principal à afficher
  final Widget body;

  /// Le titre de la page
  final String title;

  /// L'index de la page sélectionnée
  final int selectedIndex;

  /// Callback appelé lorsqu'un élément de navigation est sélectionné
  final Function(int) onDestinationSelected;

  /// Liste des destinations de navigation
  final List<NavigationDestination> destinations;

  /// Actions supplémentaires à afficher dans l'AppBar
  final List<Widget>? additionalActions;

  /// Widgets à afficher en bas de la sidebar
  final List<Widget>? sidebarBottomItems;

  /// Indique si l'utilisateur est un administrateur
  final bool isAdmin;

  /// Callback appelé lorsque le bouton de déconnexion est pressé
  final VoidCallback? onLogoutPressed;

  const DashboardLayout({
    super.key,
    required this.body,
    required this.title,
    required this.selectedIndex,
    required this.onDestinationSelected,
    required this.destinations,
    this.additionalActions,
    this.sidebarBottomItems,
    this.isAdmin = false,
    this.onLogoutPressed,
  });

  @override
  Widget build(BuildContext context) {
    try {
      debugPrint('Building DashboardLayout');

      // Vérifier que les destinations ne sont pas vides
      if (destinations.isEmpty) {
        debugPrint('ERREUR: destinations est vide dans DashboardLayout');
        return const Scaffold(
          body: Center(
            child: Text('Erreur: Aucune destination de navigation disponible'),
          ),
        );
      }

      // Vérifier que selectedIndex est valide
      if (selectedIndex < 0 || selectedIndex >= destinations.length) {
        debugPrint('ERREUR: selectedIndex invalide dans DashboardLayout');
        return Scaffold(
          body: Center(
            child:
                Text('Erreur: Index de navigation invalide ($selectedIndex)'),
          ),
        );
      }

      // Scaffold avec fond transparent (le fond est géré par AppScaffold)
      return Scaffold(
        key: ValueKey('dashboard_scaffold_$selectedIndex'),
        backgroundColor: Colors.transparent,
        appBar: DashboardAppBar(
          key: ValueKey('dashboard_appbar_$selectedIndex'),
          title: title,
          pageTitle: destinations[selectedIndex].label,
          isAdmin: isAdmin,
          onLogoutPressed: onLogoutPressed,
        ),
        body: ResponsiveNavigation(
          key: ValueKey('responsive_nav_$selectedIndex'),
          title:
              title, // Même si le titre n'est pas affiché dans la navigation, il est utilisé pour la cohérence
          body: body,
          selectedIndex: selectedIndex,
          onDestinationSelected: onDestinationSelected,
          destinations: destinations,
          // Ne pas afficher le bouton "Nouveau passage" dans la navigation
          showNewPassageButton: false,
          onNewPassagePressed: null,
          sidebarBottomItems: sidebarBottomItems,
          isAdmin: isAdmin,
          // Ne pas afficher l'AppBar dans la navigation car nous utilisons DashboardAppBar
          showAppBar: false,
        ),
      );
    } catch (e) {
      debugPrint('ERREUR CRITIQUE dans DashboardLayout.build: $e');
      // Afficher une interface de secours en cas d'erreur
      return Scaffold(
        appBar: AppBar(
          title: Text('Erreur - $title'),
          backgroundColor: Colors.red,
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Icon(Icons.error_outline, color: Colors.red, size: 64),
              const SizedBox(height: 16),
              Text(
                'Une erreur est survenue',
                style: TextStyle(
                    fontSize: AppTheme.r(context, 20),
                    fontWeight: FontWeight.bold),
              ),
              const SizedBox(height: 8),
              Text('Détails: $e'),
              const SizedBox(height: 24),
              ElevatedButton(
                onPressed: () {
                  Navigator.of(context)
                      .pushNamedAndRemoveUntil('/', (route) => false);
                },
                child: const Text('Retour à l\'accueil'),
              ),
            ],
          ),
        ),
      );
    }
  }
}
