import "package:flutter/material.dart";

import "../i18n.dart";
import "../main.dart";
import "dashboard_screen.dart";
import "charging_screen.dart";
import "settings_screen.dart";
import "admin_users_screen.dart";

/// The app's root shell — a persistent bottom navigation bar (DriverVault mockup
/// layout) hosting the Garage, Charging, Settings and (for admins) Users sections
/// in an IndexedStack so each keeps its state as you switch tabs.
class RootShell extends StatefulWidget {
  const RootShell({super.key});
  @override
  State<RootShell> createState() => _RootShellState();
}

class _RootShellState extends State<RootShell> {
  int _index = 0;

  @override
  Widget build(BuildContext context) {
    final isAdmin = authService.user?.isAdmin == true;

    final pages = <Widget>[
      const DashboardScreen(),
      const ChargingScreen(),
      const SettingsScreen(),
      if (isAdmin) const AdminUsersScreen(),
    ];

    final destinations = <NavigationDestination>[
      NavigationDestination(
        icon: const Icon(Icons.grid_view_outlined),
        selectedIcon: const Icon(Icons.grid_view_rounded),
        label: t("nav.garage"),
      ),
      NavigationDestination(
        icon: const Icon(Icons.ev_station_outlined),
        selectedIcon: const Icon(Icons.ev_station),
        label: t("nav.charging"),
      ),
      NavigationDestination(
        icon: const Icon(Icons.settings_outlined),
        selectedIcon: const Icon(Icons.settings),
        label: t("nav.settings"),
      ),
      if (isAdmin)
        NavigationDestination(
          icon: const Icon(Icons.group_outlined),
          selectedIcon: const Icon(Icons.group),
          label: t("nav.users"),
        ),
    ];

    // Guard against the index falling out of range if admin status changes.
    final index = _index.clamp(0, pages.length - 1);

    return Scaffold(
      body: IndexedStack(index: index, children: pages),
      bottomNavigationBar: NavigationBar(
        selectedIndex: index,
        onDestinationSelected: (i) => setState(() => _index = i),
        destinations: destinations,
      ),
    );
  }
}
