import React from 'react';
import { Head, Link, useForm, usePage } from '@inertiajs/react';
import PortalLayout from '@/layouts/portal-layout';
import {
    GraduationCap,
    Calendar,
    ChevronLeft,
    Briefcase,
    PlusCircle,
} from 'lucide-react';
import '../../../css/alumni-home.css';

interface SkpiGroup {
    name: string;
    nameEn: string;
    items: { text: string; textEn: string; date?: string }[];
}

interface SkpiDetail {
    learningOutcomes?: SkpiGroup[];
    additionalInformation?: SkpiGroup[];
    academicActivities?: SkpiGroup[];
    noSkpi?: string;
    tglCetak?: string;
    prestasi?: Array<any>;
    sertifikasi?: Array<any>;
    organisasi?: Array<any>;
    pelatihan?: Array<any>;
    seminar?: Array<any>;
}

interface AlumniItem {
    npm: string;
    nama: string;
    prodi?: string;
    namaProdi?: string;
    namaFakultas?: string;
    tahun_masuk?: number;
    mulaiSmt?: number;
    tahun_lulus?: number | string;
    keluarSmt?: number | null;
    status_kelulusan?: string;
    npmAktif?: boolean;
    ipk?: string;
    judul_skripsi?: string;
    fotoUrl?: string | null;
    pekerjaan_saat_ini?: string;
    skpi?: SkpiDetail;
}

interface DetailProps {
    alumni: AlumniItem;
    skpi?: SkpiDetail;
    activities: Array<{
        id: number | string;
        title: string;
        description: string;
        activity_date?: string;
        category?: {
            name: string;
        };
    }>;
}

export default function AlumniDetail({
    alumni,
    skpi,
    activities,
}: DetailProps) {
    const effectiveSkpi = skpi || alumni.skpi;
    const [failedPhoto, setFailedPhoto] = React.useState<string | null>(null);
    const { auth } = usePage<{ auth: { user: unknown | null } }>().props;
    const photoRefresh = useForm({ npm: alumni.npm });

    // Derived fields
    const prodiName = alumni.namaProdi || alumni.prodi || 'Informatika';
    const tahunMasuk =
        alumni.tahun_masuk ||
        (alumni.mulaiSmt ? Math.floor(alumni.mulaiSmt / 10) : '-');
    const tahunLulus =
        alumni.tahun_lulus ||
        (alumni.keluarSmt
            ? Math.floor(alumni.keluarSmt / 10)
            : alumni.mulaiSmt
              ? Math.floor(alumni.mulaiSmt / 10) + 4
              : '-');
    // Status NPM tidak menentukan status kelulusan pada profil alumni.
    const statusKelulusan = alumni.status_kelulusan || 'Lulus';

    return (
        <PortalLayout>
            <Head title={`Alumni: ${alumni.nama} - FT UNMA`} />

            {/* Breadcrumb Navigation */}
            <div className="stagger-1 border-b border-[#E7E3DF] bg-[#FAF8F5] py-3.5">
                <div className="mx-auto flex max-w-7xl items-center justify-between px-4 sm:px-6 lg:px-8">
                    <div className="flex items-center gap-2 text-xs">
                        <Link
                            href="/alumni"
                            className="group inline-flex items-center gap-1 font-semibold text-slate-600 transition-colors hover:text-[#7A1F2A]"
                        >
                            <ChevronLeft className="h-4 w-4 text-[#7A1F2A] transition-transform group-hover:-translate-x-1" />
                            <span>Direktori Alumni</span>
                        </Link>
                        <span className="text-slate-300">/</span>
                        <span className="max-w-55 truncate font-medium text-[#17171A] sm:max-w-none">
                            {alumni.nama}
                        </span>
                    </div>

                    <span className="hidden items-center gap-1.5 rounded-full border border-[#E7E3DF] bg-white px-2.5 py-0.5 font-mono text-[11px] font-medium text-slate-500 sm:inline-flex">
                        NPM: {alumni.npm}
                    </span>
                </div>
            </div>

            <div className="mx-auto max-w-7xl px-4 py-8 sm:px-6 sm:py-10 lg:px-8">
                <div className="grid grid-cols-1 gap-8 lg:grid-cols-3">
                    {/* Profil Kiri */}
                    <div className="stagger-2 space-y-4">
                        <div className="rounded-2xl border border-[#E7E3DF] bg-white p-7">

                            {/* Foto */}
                            <div className="mb-6 flex justify-center">
                                {alumni.fotoUrl && failedPhoto !== alumni.fotoUrl ? (
                                    <div className="h-28 w-28 overflow-hidden rounded-xl shadow-sm">
                                        <img
                                            src={alumni.fotoUrl}
                                            alt={`Foto ${alumni.nama}`}
                                            className="h-full w-full object-cover object-top"
                                            onError={() => setFailedPhoto(alumni.fotoUrl ?? null)}
                                        />
                                    </div>
                                ) : (
                                    <div className="flex h-28 w-28 items-center justify-center rounded-xl bg-slate-50 text-slate-300">
                                        <GraduationCap className="h-10 w-10 stroke-[1.25]" />
                                    </div>
                                )}
                            </div>

                            {!!auth?.user && (
                                <form
                                    className="mb-5 text-center"
                                    onSubmit={(event) => {
                                        event.preventDefault();
                                        photoRefresh.post('/admin/foto/refresh', { preserveScroll: true });
                                    }}
                                >
                                    <button
                                        id="admin-refresh-profile-photo"
                                        type="submit"
                                        disabled={photoRefresh.processing}
                                        aria-busy={photoRefresh.processing}
                                        className="min-h-10 rounded border border-[#E7E3DF] px-3 text-xs font-medium text-[#7A1F2A] hover:bg-[#FAF8F5] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#7A1F2A] disabled:cursor-wait disabled:opacity-60"
                                    >
                                        {photoRefresh.processing ? 'Memeriksa foto…' : 'Perbarui Foto'}
                                    </button>
                                    {Object.values(photoRefresh.errors).map((error) => (
                                        <p key={error} role="alert" className="mt-2 text-xs text-[#7A1F2A]">{error}</p>
                                    ))}
                                </form>
                            )}

                            {/* Nama & Prodi */}
                            <h1 className="text-[22px] font-bold leading-tight tracking-tight text-[#17171A]">
                                {alumni.nama}
                            </h1>
                            <p className="mt-1 text-sm font-medium text-[#7A1F2A]">{prodiName}</p>
                            <p className="mt-0.5 text-[11px] text-slate-600">Fakultas Teknik · Universitas Majalengka</p>

                            {/* Divider */}
                            <div className="my-5 border-t border-[#F0EDEA]" />

                            {/* Metadata */}
                            <dl className="space-y-3 text-sm">
                                <div className="flex justify-between">
                                    <dt className="text-slate-600">NPM</dt>
                                    <dd className="font-mono text-[13px] font-semibold text-[#17171A]">{alumni.npm}</dd>
                                </div>
                                <div className="flex justify-between">
                                    <dt className="text-slate-600">Angkatan</dt>
                                    <dd className="font-semibold text-[#17171A]">{tahunMasuk}</dd>
                                </div>
                                <div className="flex justify-between">
                                    <dt className="text-slate-600">Lulus</dt>
                                    <dd className="font-semibold text-[#17171A]">{tahunLulus}</dd>
                                </div>
                                {alumni.ipk && (
                                    <div className="flex justify-between">
                                        <dt className="text-slate-600">IPK</dt>
                                        <dd className="font-mono text-base font-bold text-[#17171A]">{alumni.ipk}</dd>
                                    </div>
                                )}
                                <div className="flex justify-between">
                                    <dt className="text-slate-600">Status</dt>
                                    <dd className="font-semibold text-[#17171A]">{statusKelulusan}</dd>
                                </div>
                            </dl>

                            {/* Tugas Akhir */}
                            {alumni.judul_skripsi && (
                                <>
                                    <div className="my-5 border-t border-[#F0EDEA]" />
                                    <p className="mb-2 text-[10px] font-bold uppercase tracking-widest text-slate-600">Tugas Akhir</p>
                                    <p className="text-xs leading-relaxed text-[#17171A] italic">
                                        &ldquo;{alumni.judul_skripsi}&rdquo;
                                    </p>
                                </>
                            )}

                            {/* Pekerjaan */}
                            {alumni.pekerjaan_saat_ini && (
                                <>
                                    <div className="my-5 border-t border-[#F0EDEA]" />
                                    <p className="mb-1.5 text-[10px] font-bold uppercase tracking-widest text-slate-600">Pekerjaan</p>
                                    <p className="flex items-start gap-2 text-xs text-[#17171A]">
                                        <Briefcase className="mt-0.5 h-3.5 w-3.5 shrink-0 text-slate-600" />
                                        {alumni.pekerjaan_saat_ini}
                                    </p>
                                </>
                            )}
                        </div>
                    </div>

                    {/* Konten Kanan: Akademik, SKPI & Rekam Jejak */}
                    <div className="space-y-6 sm:space-y-8 lg:col-span-2">
                        <section id="skpi" aria-labelledby="profile-skpi-title" className="scroll-mt-24 rounded-xl border border-[#E7E3DF] bg-white p-6 sm:p-7">
                            <header className="border-b border-[#E7E3DF] pb-4">
                                <h2 id="profile-skpi-title" className="text-lg font-semibold text-[#17171A]">Surat Keterangan Pendamping Ijazah</h2>
                                <p className="mt-1 text-sm text-[#5F5F64]">{alumni.nama} &bull; {alumni.npm}</p>
                                {effectiveSkpi?.noSkpi && (
                                    <p className="mt-2 text-xs font-mono text-[#7A1F2A]">No. {effectiveSkpi.noSkpi}</p>
                                )}
                                {effectiveSkpi?.tglCetak && (
                                    <p className="text-xs text-[#5F5F64]">Dicetak: {effectiveSkpi.tglCetak}</p>
                                )}
                            </header>
                            {!effectiveSkpi && (
                                <p className="mt-4 text-sm text-[#5F5F64]">Data SKPI belum tersedia atau layanan sedang tidak dapat diakses.</p>
                            )}
                        </section>

                        {/* Capaian Pembelajaran Lulusan */}
                        {effectiveSkpi && (effectiveSkpi.learningOutcomes ?? []).length > 0 && (
                            <>
                                <div className="flex items-baseline gap-2 px-1">
                                    <h2 className="text-base font-semibold text-[#17171A]">Capaian Pembelajaran Lulusan</h2>
                                    <span className="text-xs italic text-[#5F5F64]">Learning Outcomes</span>
                                </div>
                                {(effectiveSkpi.learningOutcomes ?? []).map((group: any, i: number) => (
                                    <section key={i} aria-label={group.name} className="rounded-xl border border-[#E7E3DF] bg-white p-6 sm:p-7">
                                        <div className="mb-4 flex items-center gap-3 border-b border-[#E7E3DF] pb-3">
                                            <span className="inline-block h-4 w-1 rounded-full bg-[#7A1F2A]" />
                                            <h3 className="text-sm font-semibold text-[#17171A]">{group.name}</h3>
                                            {group.nameEn && (
                                                <span lang="en" className="text-xs italic text-[#5F5F64]">{group.nameEn}</span>
                                            )}
                                        </div>
                                        <ol className="list-decimal space-y-2 pl-5">
                                            {(group.items ?? []).map((item: any, j: number) => (
                                                <li key={j} className="text-xs leading-relaxed text-[#17171A]">
                                                    {item.text}
                                                    {item.textEn && (
                                                        <span lang="en" className="ml-1 text-[#5F5F64]">({item.textEn})</span>
                                                    )}
                                                </li>
                                            ))}
                                        </ol>
                                    </section>
                                ))}
                            </>
                        )}


                        {/* Informasi Tambahan */}
                        {effectiveSkpi && (effectiveSkpi.additionalInformation ?? []).length > 0 && (
                            <section aria-labelledby="skpi-info-title" className="rounded-xl border border-[#E7E3DF] bg-white p-6 sm:p-7">
                                <h2 id="skpi-info-title" className="mb-4 border-b border-[#E7E3DF] pb-3 text-base font-semibold text-[#17171A]">
                                    Informasi Tambahan
                                    <span className="ml-2 text-xs font-normal italic text-[#5F5F64]">Additional Information</span>
                                </h2>
                                <div className="space-y-5">
                                    {(effectiveSkpi.additionalInformation ?? []).map((group: any, i: number) => (
                                        <div key={i}>
                                            <div className="mb-2 flex items-baseline gap-2">
                                                <h3 className="text-sm font-semibold text-[#7A1F2A]">{group.name}</h3>
                                                {group.nameEn && <span lang="en" className="text-xs text-[#5F5F64] italic">{group.nameEn}</span>}
                                            </div>
                                            <ul className="space-y-2">
                                                {(group.items ?? []).map((item: any, j: number) => (
                                                    <li key={j} className="rounded-lg border border-[#E7E3DF] bg-[#FAF8F5] px-4 py-2.5 text-xs leading-relaxed">
                                                        <p className="font-medium text-[#17171A]">{item.text}</p>
                                                        {item.textEn && <p lang="en" className="mt-0.5 text-[#5F5F64] italic">{item.textEn}</p>}
                                                        {item.date && <p className="mt-1 text-[10px] text-slate-600">Tanggal: {item.date}</p>}
                                                    </li>
                                                ))}
                                            </ul>
                                        </div>
                                    ))}
                                </div>
                            </section>
                        )}

                        {/* Kerja Praktek & Skripsi */}
                        {effectiveSkpi && (effectiveSkpi.academicActivities ?? []).length > 0 && (
                            <section aria-labelledby="skpi-akad-title" className="rounded-xl border border-[#E7E3DF] bg-white p-6 sm:p-7">
                                <h2 id="skpi-akad-title" className="mb-4 border-b border-[#E7E3DF] pb-3 text-base font-semibold text-[#17171A]">
                                    Kerja Praktek &amp; Skripsi
                                </h2>
                                <div className="space-y-4">
                                    {(effectiveSkpi.academicActivities ?? []).map((group: any, i: number) => (
                                        <div key={i} className="rounded-xl border-l-4 border-[#7A1F2A] bg-[#FAF8F5] px-5 py-4">
                                            <span className="mb-2 inline-block text-[10px] font-bold tracking-wider text-[#A9871F] uppercase">
                                                {group.name}
                                            </span>
                                            {(group.items ?? []).map((item: any, j: number) => (
                                                item.text ? (
                                                    <p key={j} className="text-sm font-medium leading-relaxed text-[#17171A]">
                                                        {item.text}
                                                    </p>
                                                ) : (
                                                    <p key={j} className="text-sm text-[#5F5F64] italic">Judul belum tersedia.</p>
                                                )
                                            ))}
                                        </div>
                                    ))}
                                </div>
                            </section>
                        )}

                        {/* Kiprah & Kegiatan Alumni Terverifikasi */}
                        <div className="hover-lift stagger-5 space-y-5 rounded-2xl border border-[#E7E3DF] bg-white p-6 shadow-xs transition-all duration-300 sm:p-7">
                            <div className="flex flex-col justify-between gap-2 border-b border-[#E7E3DF] pb-4 sm:flex-row sm:items-center">
                                <div className="space-y-0.5">
                                    <span className="block text-[11px] font-bold tracking-wider text-[#A9871F] uppercase">
                                        Rekam Jejak & Kontribusi
                                    </span>
                                    <h2 className="flex items-center gap-2 text-base font-bold text-[#17171A]">
                                        <Briefcase className="h-4 w-4 text-[#7A1F2A]" />
                                        Kegiatan & Jejak Karier Alumni
                                    </h2>
                                </div>

                                <Link
                                    href="/kirim-kegiatan"
                                    className="group inline-flex items-center gap-1.5 self-start text-xs font-semibold text-slate-600 transition-colors hover:text-[#7A1F2A] sm:self-auto"
                                >
                                    <PlusCircle className="h-3.5 w-3.5 text-[#7A1F2A]" />
                                    <span>Ajukan Portofolio</span>
                                </Link>
                            </div>

                            {activities.length === 0 ? (
                                <div className="space-y-2 rounded-xl border border-dashed border-[#E7E3DF] bg-[#FAF8F5] p-8 text-center">
                                    <div className="mx-auto flex h-10 w-10 items-center justify-center rounded-full border border-[#E7E3DF] bg-white text-slate-600">
                                        <Briefcase className="h-5 w-5" />
                                    </div>
                                    <p className="text-xs font-semibold text-[#17171A] sm:text-sm">
                                        Belum ada catatan kegiatan publik yang
                                        diajukan
                                    </p>
                                    <p className="mx-auto max-w-md text-xs leading-relaxed text-slate-500">
                                        Alumni yang bersangkutan dapat
                                        mengajukan aktivitas, kontribusi
                                        keilmuan, atau jejak karier melalui
                                        formulir kegiatan resmi.
                                    </p>
                                </div>
                            ) : (
                                <div className="space-y-3.5">
                                    {activities.map((act) => (
                                        <div
                                            key={act.id}
                                            className="space-y-2 rounded-xl border border-[#E7E3DF] bg-[#FAF8F5] p-4 transition-all duration-200 hover:border-[#7A1F2A]/30 sm:p-5"
                                        >
                                            <div className="flex items-center justify-between gap-2">
                                                <span className="rounded-md border border-[#7A1F2A]/20 bg-[#7A1F2A]/10 px-2.5 py-0.5 text-[11px] font-bold text-[#7A1F2A]">
                                                    {act.category?.name ||
                                                        'Kegiatan'}
                                                </span>
                                                {act.activity_date && (
                                                    <span className="inline-flex items-center gap-1 text-xs text-slate-600">
                                                        <Calendar className="h-3 w-3" />
                                                        {new Date(
                                                            act.activity_date,
                                                        ).toLocaleDateString(
                                                            'id-ID',
                                                            {
                                                                day: 'numeric',
                                                                month: 'long',
                                                                year: 'numeric',
                                                            },
                                                        )}
                                                    </span>
                                                )}
                                            </div>
                                            <h3 className="text-sm font-bold text-[#17171A] sm:text-base">
                                                {act.title}
                                            </h3>
                                            <p className="text-xs leading-relaxed text-slate-600 sm:text-sm">
                                                {act.description}
                                            </p>
                                        </div>
                                    ))}
                                </div>
                            )}
                        </div>
                    </div>
                </div>
            </div>
        </PortalLayout>
    );
}
