import { Link } from '@inertiajs/react';
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 { useAuthorization } from '@/hooks/use-authorization';
import { useI18n } from '@/hooks/use-i18n';
import { dashboard } from '@/routes';
import type { NavItem } from '@/types';
import { Separator } from './ui/separator';

export function AppSidebar() {
    const { t } = useI18n();
    const { can, hasRole } = useAuthorization();
    const canViewClientDocuments = hasRole('client') && (can('view documents') || can('view own documents'));
    const canViewAdminDocuments = can('view documents') && !hasRole('client');

    const mainNavItems: NavItem[] = [
        {
            title: t('sidebar.nav.dashboard'),
            href: dashboard(),
            icon: 'solar:widget-2-bold-duotone',
        },
    ];

    if (canViewAdminDocuments || canViewClientDocuments) {
        mainNavItems.push({
            title: t('sidebar.nav.documents'),
            href:
                hasRole('client')
                    ? '/client/documents'
                    : '/admin/documents',
            icon: 'solar:document-text-bold-duotone',
        });
    }

    if (can('view users')) {
        mainNavItems.push({
            title: t('sidebar.nav.users'),
            href: '/admin/users',
            icon: 'solar:users-group-rounded-bold-duotone',
        });
    }

    if (can('view clients')) {
        mainNavItems.push({
            title: t('sidebar.nav.clients'),
            href: '/admin/clients',
            icon: 'solar:buildings-2-bold-duotone',
        });
        mainNavItems.push({
            title: t('sidebar.nav.suppliers'),
            href: '/admin/suppliers',
            icon: 'solar:delivery-bold-duotone',
        });
    }

    if (can('manage openai settings')) {
        mainNavItems.push({
            title: t('sidebar.nav.openai'),
            href: '/admin/settings/openai',
            icon: 'solar:key-minimalistic-square-3-bold-duotone',
        });
    }

    if (can('manage mailbox accounts')) {
        mainNavItems.push({
            title: t('sidebar.nav.mailbox'),
            href: '/admin/settings/mailboxes',
            icon: 'solar:mailbox-bold-duotone',
        });
    }

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

            <Separator />

            <SidebarContent>
                <NavMain items={mainNavItems} />
            </SidebarContent>

            <SidebarFooter className="border-t border-sidebar-border">
                <NavUser />
            </SidebarFooter>
        </Sidebar>
    );
}
