import { Link, usePage } from '@inertiajs/react';
import { Activity, ClipboardPenLine, LayoutGrid, MapPinned, Radio, Shield, Users } from 'lucide-react';
import admin from '@/routes/admin';
import UserAuditController from '@/actions/App/Http/Controllers/Admin/UserAuditController';
import ScoringSessionController from '@/actions/App/Http/Controllers/ScoringSessionController';
import { index as standExplorerIndex } from '@/actions/App/Http/Controllers/StandExplorerController';
import AppLogo from '@/components/app-logo';
import { NavMain } from '@/components/nav-main';
import { NavUser } from '@/components/nav-user';
import {
    Sidebar,
    SidebarContent,
    SidebarFooter,
    SidebarHeader,
    SidebarMenu,
    SidebarMenuButton,
    SidebarMenuItem,
} from '@/components/ui/sidebar';
import { dashboard } from '@/routes';
import LocationManagementController from '@/actions/App/Http/Controllers/Admin/LocationManagementController';
import UserManagementController from '@/actions/App/Http/Controllers/Admin/UserManagementController';
import type { NavItem } from '@/types';

export function AppSidebar() {
    const { auth } = usePage().props;

    const mainNavItems: NavItem[] = [
        {
            title: 'My dashboard',
            href: dashboard(),
            icon: LayoutGrid,
        },
        {
            title: 'Scoring',
            href: ScoringSessionController.index(),
            icon: ClipboardPenLine,
        },
        {
            title: 'Live scoring',
            href: ScoringSessionController.liveSetup(),
            icon: Radio,
        },
        {
            title: 'Stand explorer',
            href: standExplorerIndex(),
            icon: MapPinned,
        },
    ];

    const adminNavItems: NavItem[] = auth.can.access_admin
        ? [
              {
                  title: 'Admin dashboard',
                  href: admin.dashboard(),
                  icon: Shield,
              },
              {
                  title: 'Users',
                  href: UserManagementController.index(),
                  icon: Users,
              },
              {
                  title: 'Locations',
                  href: LocationManagementController.index(),
                  icon: MapPinned,
              },
              {
                  title: 'Audit',
                  href: UserAuditController.index(),
                  icon: Activity,
              },
          ]
        : [];

    return (
        <Sidebar collapsible="icon" variant="inset">
            <SidebarHeader>
                <SidebarMenu>
                    <SidebarMenuItem>
                        <SidebarMenuButton size="lg" asChild>
                            <Link href={dashboard()} prefetch>
                                <AppLogo />
                            </Link>
                        </SidebarMenuButton>
                    </SidebarMenuItem>
                </SidebarMenu>
            </SidebarHeader>

            <SidebarContent>
                <NavMain items={mainNavItems} label="Platform" />
                {adminNavItems.length > 0 && (
                    <NavMain items={adminNavItems} label="Administration" />
                )}
            </SidebarContent>

            <SidebarFooter>
                {auth.can.access_admin && (
                    <div className="mx-2 mb-2 rounded-xl border border-sidebar-border/70 bg-sidebar-accent/40 p-3 text-xs leading-5 text-sidebar-foreground/80">
                        <div className="mb-1 flex items-center gap-2 font-semibold text-sidebar-foreground">
                            <Shield className="size-4" />
                            Admin access
                        </div>
                        Manage users, course locations, stand setups, and clay details from one place.
                    </div>
                )}
                <NavUser />
            </SidebarFooter>
        </Sidebar>
    );
}
