import { Form, FormField } from '@/components/form';
import HeadingSmall from '@/components/heading-small';
import { Button } from '@/components/ui/button';
import { Card, CardContent } from '@/components/ui/card';
import AppLayout from '@/layouts/app-layout';
import SettingsLayout from '@/layouts/settings/layout';
import { type BreadcrumbItem } from '@/types';
import { Head, router } from '@inertiajs/react';
import { Save, Trash2 } from 'lucide-react';
import { type ReactNode, useMemo, useState } from 'react';

interface LoginSettings {
    tenant_login_layout?: string;
    login_banner?: string | null;
    login_title?: string;
    login_subtitle?: string;
    social_login_enabled?: boolean;
    terms_url?: string;
    privacy_url?: string;
}

interface Props {
    login: LoginSettings;
}

const breadcrumbs: BreadcrumbItem[] = [
    { title: 'Home', href: '/' },
    { title: 'Settings', href: route('settings.company.edit') },
    { title: 'Login Page', href: '#' },
];

export default function LoginPage({ login }: Props) {
    const [deletingBanner, setDeletingBanner] = useState(false);

    const defaultValues = useMemo(
        () => ({
            tenant_login_layout: login?.tenant_login_layout || 'layout1',
            login_banner: login?.login_banner || '',
            login_title: login?.login_title || 'Welcome back',
            login_subtitle: login?.login_subtitle || 'Enter your email and password to sign in to your account',
            social_login_enabled: login?.social_login_enabled ?? false,
            terms_url: login?.terms_url || '',
            privacy_url: login?.privacy_url || '',
        }),
        [login],
    );

    const handleSubmit = (data: any) => {
        const payload: any = { ...data };
        if (!(payload.login_banner instanceof File)) delete payload.login_banner;

        router.post(route('settings.login-page.save'), payload, {
            forceFormData: true,
            preserveScroll: true,
            onSuccess: () => {
                try {
                    localStorage.removeItem('personalizer_settings');
                } catch {}
                fetch('/api/personalizer/resolved', { headers: { Accept: 'application/json' }, cache: 'no-cache' })
                    .then((res) => (res.ok ? res.json() : null))
                    .catch(() => {});
            },
        });
    };

    const handleDeleteBanner = () => {
        if (!confirm('Delete the login banner?')) return;
        setDeletingBanner(true);
        router.delete(route('settings.login-page.file.delete', { key: 'login_banner' }), {
            preserveScroll: true,
            onFinish: () => setDeletingBanner(false),
        });
    };

    return (
        <>
            <Head title="Login Page Settings" />
            <SettingsLayout tab="platform">
                <div className="space-y-4">
                    <Card className="px-5 py-3">
                        <div className="mb-3 border-b pb-3">
                            <HeadingSmall title="Login Page" description="Customize the appearance and content of your login page" />
                        </div>
                        <CardContent className="p-0">
                            <Form submitHandler={handleSubmit} defaultValues={defaultValues}>
                                <div className="space-y-8">
                                    {/* Layout */}
                                    <div>
                                        <h3 className="mb-4 text-sm font-semibold uppercase tracking-wide text-gray-500">
                                            Layout Template
                                        </h3>
                                        <FormField
                                            type="select"
                                            name="tenant_login_layout"
                                            label="Default Login Layout"
                                            options={[
                                                { value: 'layout1', label: 'Layout 1 — Split (banner left, form right)' },
                                                { value: 'layout2', label: 'Layout 2 — Centered card on plain background' },
                                                { value: 'layout3', label: 'Layout 3 — Card with banner header' },
                                            ]}
                                        />
                                    </div>

                                    {/* Banner */}
                                    <div>
                                        <h3 className="mb-4 text-sm font-semibold uppercase tracking-wide text-gray-500">
                                            Banner Image
                                        </h3>
                                        <div className="rounded-lg border p-4">
                                            <div className="mb-3 flex items-center justify-between">
                                                <div>
                                                    <p className="text-sm font-medium text-gray-900">Login Banner</p>
                                                    <p className="text-xs text-gray-500">Recommended: 800×1200px</p>
                                                </div>
                                                {login?.login_banner && (
                                                    <Button
                                                        type="button"
                                                        variant="outline"
                                                        size="sm"
                                                        onClick={handleDeleteBanner}
                                                        disabled={deletingBanner}
                                                        className="text-red-600 hover:border-red-300 hover:text-red-700"
                                                    >
                                                        <Trash2 className="h-4 w-4" />
                                                    </Button>
                                                )}
                                            </div>
                                            <FormField
                                                type="file"
                                                name="login_banner"
                                                accept="image/*"
                                                maxSize={10}
                                                preview={true}
                                                currentUrl={login?.login_banner ?? undefined}
                                            />
                                        </div>
                                    </div>

                                    {/* Content */}
                                    <div>
                                        <h3 className="mb-4 text-sm font-semibold uppercase tracking-wide text-gray-500">
                                            Page Content
                                        </h3>
                                        <div className="space-y-4">
                                            <FormField type="text" name="login_title" label="Title" placeholder="Welcome back" />
                                            <FormField
                                                type="textarea"
                                                name="login_subtitle"
                                                label="Subtitle"
                                                placeholder="Enter your email and password to sign in"
                                                rows={2}
                                            />
                                        </div>
                                    </div>

                                    {/* Legal Links */}
                                    <div>
                                        <h3 className="mb-4 text-sm font-semibold uppercase tracking-wide text-gray-500">
                                            Legal Links
                                        </h3>
                                        <div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
                                            <FormField
                                                type="text"
                                                name="terms_url"
                                                label="Terms of Service URL"
                                                placeholder="https://example.com/terms"
                                            />
                                            <FormField
                                                type="text"
                                                name="privacy_url"
                                                label="Privacy Policy URL"
                                                placeholder="https://example.com/privacy"
                                            />
                                        </div>
                                    </div>

                                    {/* Options */}
                                    <div>
                                        <h3 className="mb-4 text-sm font-semibold uppercase tracking-wide text-gray-500">Options</h3>
                                        <FormField
                                            type="checkbox"
                                            name="social_login_enabled"
                                            checkboxLabel="Enable social login buttons (Google, GitHub)"
                                        />
                                    </div>

                                    <Button type="submit" className="px-8">
                                        <Save className="mr-2 h-4 w-4" />
                                        Save Login Settings
                                    </Button>
                                </div>
                            </Form>
                        </CardContent>
                    </Card>
                </div>
            </SettingsLayout>
        </>
    );
}

LoginPage.layout = (page: ReactNode) => (
    <AppLayout breadcrumbs={breadcrumbs} title="Login Page Settings">
        {page}
    </AppLayout>
);
