import AdminLayout from '@/Layouts/AdminLayout';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { api } from '@/lib/api';
import { cn } from '@/lib/utils';
import { Head, router } from '@inertiajs/react';
import { toast } from 'sonner';
import OverviewTab from './components/OverviewTab';
import PermissionsTab from './components/PermissionsTab';
import ProfileHero from './components/ProfileHero';
import SecurityTab from './components/SecurityTab';
import UserSidebar from './components/UserSidebar';
import type { AdminUserDetail } from './components/types';

interface Props {
    user: AdminUserDetail;
}

export default function UsersShow({ user }: Props) {
    const handleDelete = async () => {
        if (!confirm(`Delete ${user.name}? They will be moved to trash.`))
            return;
        try {
            await api.delete(`/admin/users/${user.id}`);
            toast.success('Admin deleted');
            router.visit('/admin/users');
        } catch (err) {
            toast.error(
                err instanceof Error ? err.message : 'Failed to delete admin',
            );
        }
    };

    return (
        <AdminLayout
            title={user.name}
            breadcrumbs={[
                { label: 'System' },
                { label: 'Admins', href: '/admin/users' },
                { label: user.name },
            ]}
        >
            <Head title={user.name} />

            <ProfileHero user={user} onDelete={handleDelete} />

            {/* Body: sidebar + tabs */}
            <div className="flex flex-col lg:flex-row lg:items-start">
                <UserSidebar user={user} />

                {/* Right: tabbed content */}
                <div className="min-w-0 flex-1">
                    <Tabs defaultValue="overview">
                        {/* Underline tab bar */}
                        <div className="border-border border-b">
                            <TabsList className="h-auto w-full justify-start gap-0 rounded-none bg-transparent px-6">
                                {(
                                    [
                                        'overview',
                                        'security',
                                        'permissions',
                                    ] as const
                                ).map((tab) => (
                                    <TabsTrigger
                                        key={tab}
                                        value={tab}
                                        className={cn(
                                            'relative rounded-none border-b-2 border-transparent bg-transparent px-4 pt-3 pb-3',
                                            'text-muted-foreground text-sm font-medium capitalize',
                                            'hover:text-foreground transition-colors',
                                            'data-[state=active]:border-primary data-[state=active]:text-foreground',
                                            'data-[state=active]:bg-transparent data-[state=active]:shadow-none',
                                            'focus-visible:ring-0 focus-visible:ring-offset-0',
                                        )}
                                    >
                                        {tab}
                                    </TabsTrigger>
                                ))}
                            </TabsList>
                        </div>

                        <TabsContent
                            value="overview"
                            className="mt-0 space-y-6 p-6"
                        >
                            <OverviewTab user={user} />
                        </TabsContent>

                        <TabsContent
                            value="security"
                            className="mt-0 space-y-4 p-6"
                        >
                            <SecurityTab user={user} />
                        </TabsContent>

                        <TabsContent
                            value="permissions"
                            className="mt-0 space-y-4 p-6"
                        >
                            <PermissionsTab user={user} />
                        </TabsContent>
                    </Tabs>
                </div>
            </div>
        </AdminLayout>
    );
}
