import DeleteUser from '@/components/delete-user';
import InputError from '@/components/input-error';
import SettingsLayout from '@/layouts/settings/layout';
import { type SharedData } from '@/types';
import { Transition } from '@headlessui/react';
import { Head, Link, useForm, usePage } from '@inertiajs/react';
import { Check, Mail, User } from 'lucide-react';
import { FormEventHandler } from 'react';

export default function Profile({ mustVerifyEmail, status }: { mustVerifyEmail: boolean; status?: string }) {
    const { auth } = usePage<SharedData>().props;

    const { data, setData, patch, errors, processing, recentlySuccessful } = useForm({
        name: auth.user.name,
        email: auth.user.email,
    });

    const submit: FormEventHandler = (e) => {
        e.preventDefault();
        patch(route('profile.update'));
    };

    return (
        <SettingsLayout>
            <Head title="Profil Einstellungen - Rose Hosting" />

            <div className="space-y-8">
                <div>
                    <h2 className="text-lg font-bold text-white flex items-center gap-2">
                        <User className="h-5 w-5 text-rose-400" /> Profil-Informationen
                    </h2>
                    <p className="text-xs text-slate-400 mt-1">
                        Aktualisiere deinen Benutzernamen und deine primäre E-Mail-Adresse.
                    </p>
                </div>

                <form onSubmit={submit} className="space-y-5">
                    {/* Name */}
                    <div className="space-y-2">
                        <label htmlFor="name" className="block text-xs font-semibold text-slate-200">
                            Vollständiger Name
                        </label>
                        <input
                            id="name"
                            type="text"
                            value={data.name}
                            onChange={(e) => setData('name', e.target.value)}
                            required
                            autoComplete="name"
                            placeholder="Dein Name"
                            className="w-full bg-[#050203] border border-[#36131b] rounded-xl px-4 py-2.5 text-xs text-white outline-none focus:border-red-500 font-medium"
                        />
                        <InputError className="mt-1 text-red-400 text-xs" message={errors.name} />
                    </div>

                    {/* Email */}
                    <div className="space-y-2">
                        <label htmlFor="email" className="block text-xs font-semibold text-slate-200">
                            E-Mail Adresse
                        </label>
                        <input
                            id="email"
                            type="email"
                            value={data.email}
                            onChange={(e) => setData('email', e.target.value)}
                            required
                            autoComplete="username"
                            placeholder="deine.email@domain.de"
                            className="w-full bg-[#050203] border border-[#36131b] rounded-xl px-4 py-2.5 text-xs text-white outline-none focus:border-red-500 font-medium"
                        />
                        <InputError className="mt-1 text-red-400 text-xs" message={errors.email} />
                    </div>

                    {mustVerifyEmail && auth.user.email_verified_at === null && (
                        <div className="p-3 rounded-xl bg-amber-950/60 border border-amber-800/80 text-xs text-amber-300">
                            <p>
                                Deine E-Mail-Adresse ist noch nicht verifiziert.{' '}
                                <Link
                                    href={route('verification.send')}
                                    method="post"
                                    as="button"
                                    className="font-bold underline hover:text-white"
                                >
                                    Bestätigungs-Link erneut senden.
                                </Link>
                            </p>
                            {status === 'verification-link-sent' && (
                                <div className="mt-2 text-xs font-bold text-emerald-400">
                                    ✓ Ein neuer Verifizierungslink wurde an deine E-Mail gesendet.
                                </div>
                            )}
                        </div>
                    )}

                    <div className="flex items-center gap-4 pt-2">
                        <button
                            type="submit"
                            disabled={processing}
                            className="px-6 py-2.5 rounded-xl bg-red-600 hover:bg-red-700 text-white font-bold text-xs shadow-lg shadow-red-600/25 active:scale-95 transition-all disabled:opacity-50"
                        >
                            {processing ? 'Speichern...' : 'Änderungen Speichern'}
                        </button>

                        <Transition
                            show={recentlySuccessful}
                            enter="transition ease-in-out"
                            enterFrom="opacity-0"
                            leave="transition ease-in-out"
                            leaveTo="opacity-0"
                        >
                            <span className="text-xs text-emerald-400 font-semibold flex items-center gap-1 font-mono">
                                <Check className="h-4 w-4" /> Gespeichert!
                            </span>
                        </Transition>
                    </div>
                </form>

                <div className="pt-6 border-t border-[#1f0b0f]">
                    <DeleteUser />
                </div>
            </div>
        </SettingsLayout>
    );
}
