import AdminLayout from '@/Layouts/AdminLayout';
import PageHeader from '@/components/admin/PageHeader';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { Head, router } from '@inertiajs/react';
import { BadgeDollarSign, KeyRound, Mail, Settings2 } from 'lucide-react';
import BillingTab from './components/BillingTab';
import GeneralTab from './components/GeneralTab';
import MailTab from './components/MailTab';
import SecurityTab from './components/SecurityTab';
import { FlashBanner } from './components/shared';
import type {
    BillingSettings,
    GeneralSettings,
    MailSettings,
} from './components/types';

interface Props {
    tab: 'general' | 'billing' | 'mail' | 'security';
    general: GeneralSettings;
    billing: BillingSettings;
    mail: MailSettings;
}

const TABS = [
    { value: 'general', label: 'General', icon: Settings2 },
    { value: 'billing', label: 'Billing', icon: BadgeDollarSign },
    { value: 'mail', label: 'Mail', icon: Mail },
    { value: 'security', label: 'Security', icon: KeyRound },
] as const;

export default function SettingsIndex({ tab, general, billing, mail }: Props) {
    const handleTabChange = (value: string) => {
        router.get(
            `/admin/settings/${value}`,
            {},
            { preserveScroll: true, replace: true },
        );
    };

    return (
        <AdminLayout title="Settings">
            <Head title="Settings" />

            <div className="space-y-6 p-6 lg:p-8">
                <PageHeader
                    title="Settings"
                    description="Platform-wide configuration"
                />

                <FlashBanner />

                <Tabs value={tab} onValueChange={handleTabChange}>
                    <TabsList className="h-auto gap-1 p-1">
                        {TABS.map(({ value, label, icon: Icon }) => (
                            <TabsTrigger
                                key={value}
                                value={value}
                                className="gap-2 px-4 py-2"
                            >
                                <Icon className="h-3.5 w-3.5" />
                                {label}
                            </TabsTrigger>
                        ))}
                    </TabsList>

                    <TabsContent value="general" className="mt-4 max-w-2xl">
                        <GeneralTab settings={general} />
                    </TabsContent>

                    <TabsContent value="billing" className="mt-4 max-w-2xl">
                        <BillingTab settings={billing} />
                    </TabsContent>

                    <TabsContent value="mail" className="mt-4 max-w-2xl">
                        <MailTab settings={mail} />
                    </TabsContent>

                    <TabsContent value="security" className="mt-4 max-w-2xl">
                        <SecurityTab />
                    </TabsContent>
                </Tabs>
            </div>
        </AdminLayout>
    );
}
