import { Head, useForm } from '@inertiajs/react';
import { LoaderCircle } from 'lucide-react';
import { FormEventHandler } from 'react';

import InputError from '@/components/input-error';
import TextLink from '@/components/text-link';
import { Button } from '@/components/ui/button';
import PrimaryButton from '@/components/landing/primary-button';
import GoogleIcon from '@/components/icons/google-icon';
import { Checkbox } from '@/components/ui/checkbox';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import NeuralBackground from '@/components/landing/neural-background';
import AIParticles from '@/components/landing/ai-particles';
import Container from '@/components/landing/container';
import AppLogoIcon from '@/components/app-logo-icon';
import ThemeToggle from '@/components/theme-toggle';

type LoginForm = {
    email: string;
    password: string;
    remember: boolean;
};

interface LoginProps {
    status?: string;
    canResetPassword: boolean;
}

export default function Login({ status, canResetPassword }: LoginProps) {
    const { data, setData, post, processing, errors, reset } = useForm<Required<LoginForm>>({
        email: '',
        password: '',
        remember: false,
    });

    const submit: FormEventHandler = (e) => {
        e.preventDefault();
        post(route('login'), {
            onFinish: () => reset('password'),
        });
    };

    return (
        <>
            <Head title="Log in" />
            <div className="relative min-h-screen flex items-center justify-center overflow-hidden bg-gradient-to-br from-slate-50 via-purple-50 to-slate-50 dark:from-slate-900 dark:via-purple-900 dark:to-slate-900">
                {/* Toggle de tema flotante */}
                <div className="fixed top-4 left-4 z-50">
                    <ThemeToggle />
                </div>
                <NeuralBackground />
                <AIParticles density={30} />
                <Container className="relative z-10 flex flex-col items-center justify-center min-h-screen py-12">
                    <div className="w-full max-w-xl mx-auto bg-white/90 dark:bg-slate-900/80 rounded-3xl shadow-2xl border border-slate-200 dark:border-slate-800/60 backdrop-blur-md p-8 sm:p-10 flex flex-col gap-8">
                        <div className="flex flex-col items-center gap-3">
                            <AppLogoIcon />
                            <h1 className="text-2xl font-extrabold dark:text-white text-black">Iniciar sesión</h1>
                            <p className="text-sm text-slate-500 dark:text-slate-300 text-center">Ingresa tu email y contraseña para acceder</p>
                        </div>
                        <div className="flex flex-col gap-6">
                            {/* Google Login Button */}
                            <PrimaryButton
                                className="w-full flex items-center justify-center gap-3 bg-white text-slate-900 border border-slate-200 hover:bg-slate-50 shadow-md rounded-2xl font-semibold text-base py-3 mb-2"
                                href={route('auth.google')}
                            >
                                <GoogleIcon className="w-6 h-6" />
                                <span>Continuar con Google</span>
                            </PrimaryButton>
                            <div className="relative flex items-center py-2">
                                <div className="flex-grow border-t border-slate-200 dark:border-slate-700" />
                                <span className="mx-4 text-xs text-slate-400 dark:text-slate-500">o</span>
                                <div className="flex-grow border-t border-slate-200 dark:border-slate-700" />
                            </div>
                            <form className="flex flex-col gap-6" onSubmit={submit}>
                                <div className="grid gap-6">
                                    <div className="grid gap-2">
                                        <Label htmlFor="email">Correo electrónico</Label>
                                        <Input
                                            id="email"
                                            type="email"
                                            required
                                            autoFocus
                                            tabIndex={1}
                                            autoComplete="email"
                                            value={data.email}
                                            onChange={(e) => setData('email', e.target.value)}
                                            placeholder="nombre@institucion.edu"
                                        />
                                        <InputError message={errors.email} />
                                    </div>

                                    <div className="grid gap-2">
                                        <div className="flex items-center">
                                            <Label htmlFor="password">Contraseña</Label>
                                            {canResetPassword && (
                                                <TextLink href={route('password.request')} className="ml-auto text-sm" tabIndex={5}>
                                                    ¿Olvidaste tu contraseña?
                                                </TextLink>
                                            )}
                                        </div>
                                        <Input
                                            id="password"
                                            type="password"
                                            required
                                            tabIndex={2}
                                            autoComplete="current-password"
                                            value={data.password}
                                            onChange={(e) => setData('password', e.target.value)}
                                            placeholder="**************"
                                        />
                                        <InputError message={errors.password} />
                                    </div>

                                    <div className="flex items-center space-x-3">
                                        <Checkbox
                                            id="remember"
                                            name="remember"
                                            checked={data.remember}
                                            onClick={() => setData('remember', !data.remember)}
                                            tabIndex={3}
                                        />
                                        <Label htmlFor="remember">Recordarme</Label>
                                    </div>

                                    <Button type="submit" className="mt-4 w-full bg-emerald-600 text-white font-bold rounded-2xl shadow-lg hover:scale-105 transition-all duration-300 border-none" tabIndex={4} disabled={processing}>
                                        {processing && <LoaderCircle className="h-4 w-4 animate-spin" />}
                                        Iniciar sesión
                                    </Button>
                                </div>

                                <div className="text-center text-sm text-muted-foreground">
                                    ¿No tienes cuenta?{' '}
                                    <TextLink href={route('register')} tabIndex={5}>
                                        Regístrate
                                    </TextLink>
                                </div>
                            </form>
                        </div>
                        {status && <div className="mb-4 text-center text-sm font-medium text-green-600">{status}</div>}
                    </div>
                </Container>
            </div>
        </>
    );
}
