import { NavFooter } from '@/components/nav-footer';
import { NavMainGroup } from '@/components/nav-main-group';
import { NavUser } from '@/components/nav-user';
import {
    Sidebar,
    SidebarContent,
    SidebarFooter,
    SidebarHeader,
    SidebarMenu,
    SidebarMenuButton,
    SidebarMenuItem,
} from '@/components/ui/sidebar';
import { dashboard } from '@/routes';
import admin from '@/routes/admin';
import { type NavItem } from '@/types';
import { Link } from '@inertiajs/react';
import {
    Activity,
    ArrowRightLeft,
    BarChart3,
    Box,
    Building2,
    ClipboardCheck,
    ClipboardList,
    DatabaseBackup,
    FileText,
    FlaskConical,
    FormInput,
    History,
    LayoutGrid,
    List,
    ListTree,
    MapPin,
    Package,
    Plug,
    Rows3,
    ScrollText,
    Send,
    Shield,
    Signature,
    SlidersHorizontal,
    TrendingDown,
    Users,
    Zap,
} from 'lucide-react';
import AppLogo from './app-logo';

const mainNavGroups = [
    {
        title: 'Platform',
        items: [
            {
                title: 'Dashboard',
                href: dashboard(),
                icon: LayoutGrid,
            },
            {
                title: 'Analytics',
                href: admin.analytics.index(),
                icon: BarChart3,
            },
        ],
    },
    {
        title: 'Market',
        items: [
            {
                title: 'States',
                href: admin.states.index(),
                icon: MapPin,
            },
            {
                title: 'Zip Codes',
                href: admin.zipCodes.index(),
                icon: MapPin,
            },
            {
                title: 'Utilities',
                href: admin.utilities.index(),
                icon: Zap,
            },
            {
                title: 'Standard Offer Rates',
                href: admin.standardOfferRates.index(),
                icon: TrendingDown,
            },
            {
                title: 'Test Zip Codes',
                href: admin.testZipCodes.index(),
                icon: FlaskConical,
            },
        ],
    },
    {
        title: 'Suppliers',
        items: [
            {
                title: 'Suppliers',
                href: admin.suppliers.index(),
                icon: Building2,
            },
            {
                title: 'Utility Mappings',
                href: admin.supplierUtilityMappings.index(),
                icon: ArrowRightLeft,
            },
            {
                title: 'State Affirmations',
                href: admin.supplierStateAffirmations.index(),
                icon: ClipboardCheck,
            },
        ],
    },
    {
        title: 'Products',
        items: [
            {
                title: 'Products',
                href: admin.products.index(),
                icon: Box,
            },
            {
                title: 'Supplier Products',
                href: admin.supplierProducts.index(),
                icon: Package,
            },
            {
                title: 'Product Imports',
                href: admin.supplierProductImports.index(),
                icon: History,
            },
            {
                title: 'Product Field Mappings',
                href: admin.supplierProductFieldMappings.index(),
                icon: ArrowRightLeft,
            },
        ],
    },
    {
        title: 'Enrollment Forms',
        items: [
            {
                title: 'Form Fields',
                href: admin.formFields.index(),
                icon: FormInput,
            },
            {
                title: 'Form Sections',
                href: admin.formSections.index(),
                icon: Rows3,
            },
            {
                title: 'Web Forms',
                href: admin.webForms.index(),
                icon: ClipboardList,
            },
            {
                title: 'Web Form Fields',
                href: admin.webFormFields.index(),
                icon: List,
            },
            {
                title: 'Supplier Web Form Fields',
                href: admin.supplierWebFormFields.index(),
                icon: FormInput,
            },
            {
                title: 'Enrollment Field Mappings',
                href: admin.supplierEnrollmentFieldMappings.index(),
                icon: ArrowRightLeft,
            },
        ],
    },
    {
        title: 'Enrollments',
        items: [
            {
                title: 'Enrollment Requests',
                href: admin.enrollmentRequests.index(),
                icon: Signature,
            },
            {
                title: 'Supplier Enrollments',
                href: admin.supplierEnrollments.index(),
                icon: Send,
            },
            {
                title: 'Credit Check Requests',
                href: admin.creditCheckRequests.index(),
                icon: ClipboardCheck,
            },
            {
                title: 'Web Form Sessions',
                href: admin.webFormSessions.index(),
                icon: ListTree,
            },
            {
                title: 'Web Form Progress Events',
                href: admin.webFormProgressEvents.index(),
                icon: Activity,
            },
            {
                title: 'Credit Checks',
                href: admin.supplierCreditChecks.index(),
                icon: Shield,
            },
            {
                title: 'Fraud Checks',
                href: admin.supplierFraudChecks.index(),
                icon: Shield,
            },
            {
                title: 'API Logs',
                href: admin.publicApiRequestLogs.index(),
                icon: ScrollText,
            },
            {
                title: 'Enrollment Test',
                href: admin.enrollmentTest.index(),
                icon: FlaskConical,
            },
        ],
    },
    {
        title: 'System',
        items: [
            {
                title: 'Users',
                href: admin.users.index(),
                icon: Users,
            },
            {
                title: 'Reports',
                href: admin.reports.index(),
                icon: FileText,
            },
            {
                title: 'Integrations',
                href: admin.integrations.index(),
                icon: Plug,
            },
            {
                title: 'Backups',
                href: admin.backups.index(),
                icon: DatabaseBackup,
            },
            {
                title: 'Platform Settings',
                href: admin.platformSettings.index(),
                icon: SlidersHorizontal,
            },
        ],
    },
];

const footerNavItems: NavItem[] = [];

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

            <SidebarContent>
                <NavMainGroup groups={mainNavGroups} />
            </SidebarContent>

            <SidebarFooter>
                <NavFooter items={footerNavItems} className="mt-auto" />
                <NavUser />
            </SidebarFooter>
        </Sidebar>
    );
}
