import { useEffect, useState } from 'react';
import { Head } from '@inertiajs/react';
import { toast } from '@heroui/react';
import { DocumentIcon } from '@heroicons/react/24/solid';
import { api } from '@/lib/api';
import { formatDate } from '@/lib/formatDate';

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

interface ViewData {
    kode: string;
    submitted_at: string | null;
    data: {
        nama: string;
        keahlian: string | null;
        instansi: string | null;
        nomor_hp: string | null;
        email: string | null;
        berkas: Berkas[];
    };
}

function Row({ label, value }: { label: string; value: string | null }) {
    return (
        <div className="flex flex-col gap-0.5 py-2 border-b border-gray-100 last:border-0">
            <span className="text-xs font-medium text-gray-500">{label}</span>
            <span className="text-sm text-gray-900">{value || '-'}</span>
        </div>
    );
}

export default function NarasumberView({ token }: { token: string }) {
    const [loading, setLoading] = useState(true);
    const [view, setView] = useState<ViewData | null>(null);

    useEffect(() => {
        api.get(`/public/narasumber/lihat/${token}`)
            .then(({ data }) => setView(data))
            .catch(() => toast.danger('Link tidak valid'))
            .finally(() => setLoading(false));
    }, [token]);

    return (
        <div className="min-h-screen bg-gray-50 py-8 px-4">
            <Head title="Data Narasumber" />
            <div className="mx-auto max-w-xl">
                {loading && <p className="text-sm text-gray-500">Memuat...</p>}

                {!loading && view && (
                    <div className="rounded-2xl bg-white border border-gray-200 p-5 sm:p-6 shadow-sm">
                        <div className="flex items-center justify-between mb-4">
                            <h1 className="text-lg font-bold text-gray-900">{view.data.nama}</h1>
                            <span className="text-xs text-gray-400">{view.kode}</span>
                        </div>

                        <Row label="Keahlian" value={view.data.keahlian} />
                        <Row label="Instansi" value={view.data.instansi} />
                        <Row label="Nomor HP" value={view.data.nomor_hp} />
                        <Row label="Email" value={view.data.email} />

                        <div className="mt-4">
                            <span className="text-xs font-medium text-gray-500">Berkas</span>
                            <div className="mt-2 grid grid-cols-2 gap-2">
                                {view.data.berkas.map((b) => (
                                    b.url ? (
                                        <a
                                            key={b.col}
                                            href={b.url}
                                            target="_blank"
                                            rel="noreferrer"
                                            className="flex items-center gap-2 rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 text-sm text-sky-700 hover:bg-sky-50"
                                        >
                                            <DocumentIcon className="w-4 h-4 shrink-0" /> {b.label}
                                        </a>
                                    ) : (
                                        <span key={b.col} className="flex items-center gap-2 rounded-lg border border-dashed border-gray-200 px-3 py-2 text-sm text-gray-400">
                                            <DocumentIcon className="w-4 h-4 shrink-0" /> {b.label}
                                        </span>
                                    )
                                ))}
                            </div>
                        </div>

                        {view.submitted_at && (
                            <p className="mt-4 text-xs text-gray-400">Diisi {formatDate(view.submitted_at)}</p>
                        )}
                    </div>
                )}
            </div>
        </div>
    );
}
