import AdminLayout from '@admin/layouts/admin/admin-layout';
import { cn } from '@admin/lib/utils';
import { Head } from '@inertiajs/react';
import { ChevronRight, Palette, Type } from 'lucide-react';
import { ReactNode, useState } from 'react';
import BrandingPanel from './panels/BrandingPanel';
import TypographyPanel from './panels/TypographyPanel';

type TabKey = 'branding' | 'typography';

const TABS: { key: TabKey; label: string; icon: React.ElementType }[] = [
    { key: 'branding', label: 'Branding', icon: Palette },
    { key: 'typography', label: 'Typography', icon: Type },
];

interface Props {
    branding: Record<string, any>;
    login: Record<string, any>;
    typography: Record<string, any>;
}

export default function PersonalizerIndex({ branding, login, typography }: Props) {
    const [activeTab, setActiveTab] = useState<TabKey>('branding');

    const activeLabel = TABS.find((t) => t.key === activeTab)?.label ?? '';

    return (
        <div className="min-h-screen bg-background">
            <Head title="Personalizer - Admin" />

            {/* Header */}
            <div className="border-b border-gray-200">
                <div className="mx-auto px-4">
                    <div className="py-4">
                        <div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
                            <div>
                                <h1 className="text-xl font-semibold text-primary sm:text-2xl">Appearance</h1>
                                <p className="mt-1 text-xs text-gray-600 sm:text-sm">
                                    Set system-wide defaults for branding, login page, and typography
                                </p>
                            </div>
                            <div className="hidden items-center space-x-2 text-sm text-gray-500 sm:flex">
                                <span>Workspace Settings</span>
                                <ChevronRight className="h-4 w-4" />
                                <span className="font-medium text-primary">{activeLabel}</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            {/* Body */}
            <div className="min-w-0 flex-1">
                <div className="mx-auto w-full py-4 sm:px-4">

                    {/* Mobile nav */}
                    <div className="mb-4 block lg:hidden">
                        <div className="space-y-2 px-4">
                            {TABS.map((tab) => {
                                const Icon = tab.icon;
                                const isActive = activeTab === tab.key;
                                return (
                                    <button
                                        key={tab.key}
                                        onClick={() => setActiveTab(tab.key)}
                                        className={cn(
                                            'flex w-full items-center gap-3 rounded-lg border border-gray-200 px-4 py-3 text-sm font-medium transition-colors',
                                            isActive
                                                ? 'bg-primary text-white'
                                                : 'bg-white text-gray-700 hover:bg-gray-50',
                                        )}
                                    >
                                        <Icon className="h-4 w-4" />
                                        {tab.label}
                                    </button>
                                );
                            })}
                        </div>
                    </div>

                    {/* Desktop: sidebar + content */}
                    <div className="flex gap-6">
                        <div className="hidden lg:block">
                            <div className="sticky top-20 w-64 2xl:w-72">
                                <div className="rounded-lg border bg-muted p-4">
                                    <div className="mb-4">
                                        <h3 className="text-sm font-medium tracking-wide text-gray-500">Personalizer</h3>
                                    </div>
                                    <nav className="space-y-1">
                                        {TABS.map((tab) => {
                                            const Icon = tab.icon;
                                            const isActive = activeTab === tab.key;
                                            return (
                                                <button
                                                    key={tab.key}
                                                    onClick={() => setActiveTab(tab.key)}
                                                    className={cn(
                                                        'flex w-full items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors',
                                                        isActive
                                                            ? 'bg-primary text-white'
                                                            : 'text-gray-700 hover:bg-gray-100',
                                                    )}
                                                >
                                                    <Icon className="h-4 w-4" />
                                                    {tab.label}
                                                </button>
                                            );
                                        })}
                                    </nav>
                                </div>
                            </div>
                        </div>

                        {/* Main content */}
                        <div className="w-full flex-1 px-4 lg:px-0">
                            {activeTab === 'branding' && <BrandingPanel branding={branding} login={login} />}
                            {activeTab === 'typography' && <TypographyPanel typography={typography} />}
                        </div>
                    </div>
                </div>
            </div>
        </div>
    );
}

PersonalizerIndex.layout = (page: ReactNode) => (
    <AdminLayout
        breadcrumbs={[
            { title: 'Workspace Settings', href: '/admin/settings/product' },
            { title: 'Appearance', href: '#' },
        ]}
    >
        {page}
    </AdminLayout>
);
