import { useEffect, useState } from 'react';
import { Head } from '@inertiajs/react';
import { Button, toast } from '@heroui/react';
import { CheckCircleIcon, LockClosedIcon } from '@heroicons/react/24/solid';
import { Field } from '@/Components/ui/Field';
import { FileField } from '@/Components/ui/FileField';
import { api } from '@/lib/api';

interface Berkas {
    col: string;
    label: string;
    url: string | null;
}

interface FormData {
    nama: string;
    keahlian: string | null;
    instansi: string | null;
    nomor_hp: string | null;
    email: string | null;
    berkas: Berkas[];
}

const BERKAS: { col: string; label: string }[] = [
    { col: 'berkas_ktp', label: 'KTP' },
    { col: 'berkas_npwp', label: 'NPWP' },
    { col: 'berkas_cv', label: 'CV' },
    { col: 'berkas_bnsp', label: 'BNSP' },
    { col: 'berkas_materi', label: 'Materi' },
    { col: 'berkas_cover_rekening', label: 'Cover Rekening' },
    { col: 'berkas_foto', label: 'Foto Diri (untuk Flyer Acara)' },
    { col: 'berkas_pendukung', label: 'Berkas Pendukung' },
];

import { GlobalUploadWidget } from '@/Components/ui/GlobalUploadWidget';

export default function NarasumberForm({ token }: { token: string }) {
    const [loading, setLoading] = useState(true);
    const [locked, setLocked] = useState(false);
    const [done, setDone] = useState(false);
    const [submitting, setSubmitting] = useState(false);
    const [form, setForm] = useState<Record<string, any>>({});

    useEffect(() => {
        api.get(`/public/narasumber/isi/${token}`)
            .then(({ data }) => {
                setLocked(data.locked);
                const d: FormData = data.data;
                const next: Record<string, any> = {
                    nama: d.nama ?? '',
                    keahlian: d.keahlian ?? '',
                    instansi: d.instansi ?? '',
                    nomor_hp: d.nomor_hp ?? '',
                    email: d.email ?? '',
                };
                d.berkas.forEach((b) => { next[b.col] = b.url ?? ''; });
                setForm(next);
            })
            .catch(() => toast.danger('Link tidak valid atau sudah tidak berlaku'))
            .finally(() => setLoading(false));
    }, [token]);

    async function submit() {
        setSubmitting(true);
        try {
            await api.post(`/public/narasumber/isi/${token}`, form);
            setDone(true);
        } catch (e: any) {
            toast.danger(e?.response?.data?.message ?? 'Gagal mengirim, periksa kembali isian');
        } finally {
            setSubmitting(false);
        }
    }

    return (
        <div className="min-h-screen bg-gray-50 py-8 px-4">
            <Head title="Formulir Data Narasumber" />
            <div className="mx-auto max-w-xl">
                <h1 className="text-xl font-bold text-gray-900 mb-1">Formulir Data Narasumber</h1>
                <p className="text-sm text-gray-500 mb-6">Lengkapi data dan unggah berkas berikut. Setelah dikirim, data tidak bisa diubah lagi.</p>

                {loading && <p className="text-sm text-gray-500">Memuat...</p>}

                {!loading && (locked || done) && (
                    <div className="rounded-2xl bg-white border border-gray-200 p-8 text-center shadow-sm">
                        {done ? (
                            <>
                                <CheckCircleIcon className="w-12 h-12 text-emerald-500 mx-auto mb-3" />
                                <p className="font-semibold text-gray-900">Terima kasih, data sudah terkirim.</p>
                            </>
                        ) : (
                            <>
                                <LockClosedIcon className="w-12 h-12 text-amber-500 mx-auto mb-3" />
                                <p className="font-semibold text-gray-900">Formulir sudah diisi sebelumnya.</p>
                                <p className="text-sm text-gray-500 mt-1">Hubungi admin bila perlu memperbarui data.</p>
                            </>
                        )}
                    </div>
                )}

                {!loading && !locked && !done && (
                    <div className="rounded-2xl bg-gray-100 border border-gray-200 p-5 sm:p-6 shadow-sm flex flex-col gap-4">
                        <Field label="Nama" required value={form.nama ?? ''} onChange={(v) => setForm((s) => ({ ...s, nama: v }))} />
                        <Field label="Keahlian" multiline value={form.keahlian ?? ''} onChange={(v) => setForm((s) => ({ ...s, keahlian: v }))} />
                        <Field label="Instansi" value={form.instansi ?? ''} onChange={(v) => setForm((s) => ({ ...s, instansi: v }))} />
                        <Field label="Nomor HP" value={form.nomor_hp ?? ''} onChange={(v) => setForm((s) => ({ ...s, nomor_hp: v }))} />
                        <Field label="Email" type="email" value={form.email ?? ''} onChange={(v) => setForm((s) => ({ ...s, email: v }))} />

                        <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
                            {BERKAS.map((b) => (
                                <FileField
                                    key={b.col}
                                    label={b.label}
                                    max={1}
                                    uploadUrl={`/public/narasumber/isi/${token}/berkas`}
                                    value={form[b.col] ? [form[b.col]] : []}
                                    onChange={(urls) => setForm((s) => ({ ...s, [b.col]: urls[0] ?? '' }))}
                                />
                            ))}
                        </div>

                        <Button variant="primary" onPress={submit} isDisabled={submitting} className="mt-2">
                            {submitting ? 'Mengirim...' : 'Kirim'}
                        </Button>
                    </div>
                )}
            </div>
            <GlobalUploadWidget />
        </div>
    );
}
