import React, { useState, useEffect, useRef } from 'react';
import { Head, Link, router } from '@inertiajs/react';
import PortalLayout from '@/layouts/portal-layout';
import {
    Search,
    X,
    ArrowRight,
    GraduationCap,
    Award,
    CheckCircle2,
    Calendar,
    ChevronLeft,
    ChevronRight,
    UsersRound,
} from 'lucide-react';
import {
    Select,
    SelectContent,
    SelectItem,
    SelectTrigger,
    SelectValue,
} from '@/components/ui/select';
import '../../../css/alumni-home.css';

interface AlumniItem {
    npm: string;
    idMahasiswaPt?: string;
    nama: string;
    namaProdi: string;
    namaFakultas?: string;
    mulaiSmt?: number;
    keluarSmt?: number | null;
    noSkpi?: string | null;
    tglCetakSkpi?: string | null;
    ipk?: string | null;
    jenisKelamin?: string;
    tempatLahir?: string | null;
    tanggalLahir?: string | null;
    npmAktif?: boolean;
    foto_url?: string;
    pekerjaan_saat_ini?: string;
    status_kelulusan?: string;
    tahun_lulus?: number | string;
    prodi?: string;
}

interface AlumniProps {
    alumni: {
        data: AlumniItem[];
        current_page: number;
        last_page: number;
        total: number;
        per_page?: number;
        filter_options?: { prodi: string[]; tahun_lulus: string[] };
    };
    filters: {
        search: string;
        prodi: string;
        tahun_lulus: string;
    };
}

export default function AlumniDirectory({ alumni, filters }: AlumniProps) {
    const [search, setSearch] = useState(filters.search || '');
    const [prodi, setProdi] = useState(filters.prodi || '');
    const [tahunLulus, setTahunLulus] = useState(filters.tahun_lulus || '');

    useEffect(() => {
        const elements = document.querySelectorAll('.scroll-reveal');
        if (!elements.length) return;
        const observer = new IntersectionObserver(
            (entries) => {
                entries.forEach((entry) => {
                    if (entry.isIntersecting) {
                        entry.target.classList.add('is-visible');
                        observer.unobserve(entry.target);
                    }
                });
            },
            { threshold: 0.1, rootMargin: '0px 0px -30px 0px' },
        );

        elements.forEach((el) => observer.observe(el));
        return () => observer.disconnect();
    }, [alumni.data]);

    const isFirstRender = useRef(true);
    const lastQueriedRef = useRef({
        search: filters.search || '',
        prodi: filters.prodi || '',
        tahun_lulus: filters.tahun_lulus || '',
    });

    useEffect(() => {
        if (isFirstRender.current) {
            isFirstRender.current = false;
            return;
        }

        const trimmed = search.trim();
        if (
            trimmed === lastQueriedRef.current.search &&
            prodi === lastQueriedRef.current.prodi &&
            tahunLulus === lastQueriedRef.current.tahun_lulus
        ) {
            return;
        }

        const timer = setTimeout(() => {
            lastQueriedRef.current = {
                search: trimmed,
                prodi,
                tahun_lulus: tahunLulus,
            };
            router.get(
                '/alumni',
                {
                    search: trimmed || undefined,
                    prodi: prodi || undefined,
                    tahun_lulus: tahunLulus || undefined,
                    page: 1,
                },
                {
                    preserveState: true,
                    preserveScroll: true,
                    replace: true,
                },
            );
        }, 350);

        return () => clearTimeout(timer);
    }, [search, prodi, tahunLulus]);

    const handleFilter = (e?: React.FormEvent) => {
        if (e) e.preventDefault();
        const trimmed = search.trim();
        lastQueriedRef.current = {
            search: trimmed,
            prodi,
            tahun_lulus: tahunLulus,
        };
        router.get(
            '/alumni',
            {
                search: trimmed || undefined,
                prodi: prodi || undefined,
                tahun_lulus: tahunLulus || undefined,
                page: 1,
            },
            {
                preserveState: true,
                preserveScroll: true,
                replace: true,
            },
        );
    };

    const handleReset = () => {
        setSearch('');
        setProdi('');
        setTahunLulus('');
        lastQueriedRef.current = { search: '', prodi: '', tahun_lulus: '' };
        router.get(
            '/alumni',
            {},
            {
                preserveState: true,
                preserveScroll: true,
                replace: true,
            },
        );
    };

    const prodiOptions = alumni.filter_options?.prodi ?? [];
    const tahunOptions = alumni.filter_options?.tahun_lulus ?? [];

    const getTahunLulus = (item: AlumniItem): string => {
        return item.tahun_lulus ? String(item.tahun_lulus) : '-';
    };

    const getProdi = (item: AlumniItem): string => {
        return item.namaProdi || item.prodi || 'Fakultas Teknik';
    };

    const pageNumbers = [...new Set([1, alumni.current_page - 1, alumni.current_page, alumni.current_page + 1, alumni.last_page])]
        .filter((page) => page >= 1 && page <= alumni.last_page)
        .sort((a, b) => a - b);
    const pagination: (number | string)[] = pageNumbers.flatMap((page, index) =>
        index > 0 && page - pageNumbers[index - 1] > 1 ? [`gap-${page}`, page] : [page],
    );
    const isFiltered = Boolean(search || prodi || tahunLulus);

    return (
        <PortalLayout>
            <Head title="Direktori Alumni - Fakultas Teknik UNMA">
                <meta
                    name="description"
                    content="Temukan rekan alumni Fakultas Teknik Universitas Majalengka berdasarkan nama, NPM, program studi, dan tahun kelulusan."
                />
            </Head>

            <div className="alumni-home min-h-screen pb-20">
                {/* Header Banner - Editorial Konsisten dengan Home */}
                <header className="border-b border-[#E7E3DF] bg-white">
                    <div className="alumni-shell py-10 lg:py-14">
                        <div className="max-w-3xl">
                            <p className="stagger-1 mb-2 text-xs font-semibold tracking-[0.14em] text-[#87630E] uppercase">
                                DIREKTORI ALUMNI
                            </p>
                            <h1 className="stagger-2 alumni-display text-3xl leading-[1.12] font-bold tracking-tight text-[#17171A] sm:text-4xl lg:text-[44px]">
                                Temukan Alumni FT UNMA
                            </h1>
                            <p className="stagger-3 mt-3.5 max-w-2xl text-sm leading-relaxed text-[#5F5F64] sm:text-base">
                                Akses data resmi alumni dan lulusan Fakultas
                                Teknik Universitas Majalengka. Terhubung
                                langsung dengan sistem verifikasi Satu UNMA dan
                                rekam jejak SKPI.
                            </p>
                        </div>
                    </div>
                </header>

                {/* Filter and Search Console */}
                <section
                    className="border-b border-[#E7E3DF] bg-[#F7F6F3]"
                    aria-label="Pencarian dan Filter"
                >
                    <div className="alumni-shell py-7">
                        <form onSubmit={handleFilter} className="space-y-4">
                            {/* Card Box Filter Terpadu */}
                            <div className="directory-filter-panel">
                                <div className="grid grid-cols-1 items-end gap-4 md:grid-cols-12">
                                    {/* Kolom 1: Search Input */}
                                    <div className="space-y-1.5 md:col-span-6">
                                        <label
                                            htmlFor="alumni-search-input"
                                            className="block text-xs font-semibold tracking-wider text-[#5F5F64] uppercase"
                                        >
                                            Nama Alumni atau NPM
                                        </label>
                                        <div className="relative flex items-center">
                                            <Search
                                                aria-hidden="true"
                                                className="pointer-events-none absolute left-3.5 h-4 w-4 text-[#87878D]"
                                            />
                                            <input
                                                id="alumni-search-input"
                                                type="text"
                                                value={search}
                                                onChange={(e) =>
                                                    setSearch(e.target.value)
                                                }
                                                placeholder="Ketik nama atau NPM alumni..."
                                                autoComplete="off"
                                                className="h-12 w-full rounded-lg border border-[#D7D1CC] bg-white pr-9 pl-10 text-sm text-[#17171A] placeholder-[#87878D] transition-all focus:border-[#7A1F2A] focus:ring-2 focus:ring-[#7A1F2A]/10 focus:outline-hidden"
                                            />
                                            {search && (
                                                <button
                                                    type="button"
                                                    onClick={() =>
                                                        setSearch('')
                                                    }
                                                    aria-label="Hapus kata kunci"
                                                    className="absolute right-3 rounded-md p-1 text-[#87878D] transition-colors hover:bg-[#F7F6F3] hover:text-[#17171A]"
                                                >
                                                    <X className="h-3.5 w-3.5" />
                                                </button>
                                            )}
                                        </div>
                                    </div>

                                    {/* Kolom 2: Dropdown Program Studi */}
                                    <div className="space-y-1.5 md:col-span-3">
                                        <label
                                            htmlFor="alumni-prodi-trigger"
                                            className="block text-xs font-semibold tracking-wider text-[#5F5F64] uppercase"
                                        >
                                            Program Studi
                                        </label>
                                        <Select
                                            value={prodi || 'all'}
                                            onValueChange={(val) =>
                                                setProdi(
                                                    val === 'all' ? '' : val,
                                                )
                                            }
                                        >
                                            <SelectTrigger
                                                id="alumni-prodi-trigger"
                                                className="h-12 w-full rounded-lg border-[#D7D1CC]! bg-white! px-3.5 text-sm text-[#17171A]! shadow-none outline-none! focus:border-[#7A1F2A]! focus:ring-2! focus:ring-[#7A1F2A]/10! focus-visible:border-[#7A1F2A]! focus-visible:ring-2! focus-visible:ring-[#7A1F2A]/10! dark:border-[#D7D1CC]! dark:bg-white! dark:text-[#17171A]! [&>svg]:text-[#87878D]! [&>svg]:opacity-100!"
                                            >
                                                <SelectValue placeholder="Semua Program Studi" />
                                            </SelectTrigger>
                                            <SelectContent className="z-50 border-[#E7E3DF]! bg-white! text-[#17171A]! shadow-xl dark:border-[#E7E3DF]! dark:bg-white! dark:text-[#17171A]!">
                                                <SelectItem
                                                    value="all"
                                                    className="cursor-pointer text-sm text-[#17171A]! focus:bg-[#F8EEEF]! focus:text-[#7A1F2A]! dark:text-[#17171A]! dark:focus:bg-[#F8EEEF]! dark:focus:text-[#7A1F2A]!"
                                                >
                                                    Semua Program Studi
                                                </SelectItem>
                                                {prodiOptions.map((p) => (
                                                    <SelectItem
                                                        key={p}
                                                        value={p}
                                                        className="cursor-pointer text-sm text-[#17171A]! focus:bg-[#F8EEEF]! focus:text-[#7A1F2A]! dark:text-[#17171A]! dark:focus:bg-[#F8EEEF]! dark:focus:text-[#7A1F2A]!"
                                                    >
                                                        {p}
                                                    </SelectItem>
                                                ))}
                                            </SelectContent>
                                        </Select>
                                    </div>

                                    {/* Kolom 3: Dropdown Tahun Lulus */}
                                    <div className="space-y-1.5 md:col-span-3">
                                        <label
                                            htmlFor="alumni-year-trigger"
                                            className="block text-xs font-semibold tracking-wider text-[#5F5F64] uppercase"
                                        >
                                            Tahun Lulus
                                        </label>
                                        <Select
                                            value={tahunLulus || 'all'}
                                            onValueChange={(val) =>
                                                setTahunLulus(
                                                    val === 'all' ? '' : val,
                                                )
                                            }
                                        >
                                            <SelectTrigger
                                                id="alumni-year-trigger"
                                                className="h-12 w-full rounded-lg border-[#D7D1CC]! bg-white! px-3.5 text-sm text-[#17171A]! shadow-none outline-none! focus:border-[#7A1F2A]! focus:ring-2! focus:ring-[#7A1F2A]/10! focus-visible:border-[#7A1F2A]! focus-visible:ring-2! focus-visible:ring-[#7A1F2A]/10! dark:border-[#D7D1CC]! dark:bg-white! dark:text-[#17171A]! [&>svg]:text-[#87878D]! [&>svg]:opacity-100!"
                                            >
                                                <SelectValue placeholder="Semua Tahun" />
                                            </SelectTrigger>
                                            <SelectContent className="z-50 border-[#E7E3DF]! bg-white! text-[#17171A]! shadow-xl dark:border-[#E7E3DF]! dark:bg-white! dark:text-[#17171A]!">
                                                <SelectItem
                                                    value="all"
                                                    className="cursor-pointer text-sm text-[#17171A]! focus:bg-[#F8EEEF]! focus:text-[#7A1F2A]! dark:text-[#17171A]! dark:focus:bg-[#F8EEEF]! dark:focus:text-[#7A1F2A]!"
                                                >
                                                    Semua Tahun
                                                </SelectItem>
                                                {tahunOptions.map((t) => (
                                                    <SelectItem
                                                        key={t}
                                                        value={t}
                                                        className="cursor-pointer text-sm text-[#17171A]! focus:bg-[#F8EEEF]! focus:text-[#7A1F2A]! dark:text-[#17171A]! dark:focus:bg-[#F8EEEF]! dark:focus:text-[#7A1F2A]!"
                                                    >
                                                        Lulus {t}
                                                    </SelectItem>
                                                ))}
                                            </SelectContent>
                                        </Select>
                                    </div>
                                </div>

                                <div className="directory-filter-actions">
                                    {/* Action Buttons */}
                                    <div className="ml-auto flex items-center gap-2">
                                        {isFiltered && (
                                            <button
                                                type="button"
                                                onClick={handleReset}
                                                className="inline-flex h-10 items-center rounded-lg px-3.5 text-xs font-semibold text-[#5F5F64] transition-all duration-200 hover:bg-[#FAF8F5] hover:text-[#17171A] active:scale-95"
                                            >
                                                Reset
                                            </button>
                                        )}
                                        <button
                                            type="submit"
                                            className="inline-flex h-10 items-center justify-center rounded-lg bg-[#7A1F2A] px-5 text-xs font-semibold text-white transition-all duration-200 hover:bg-[#681923] hover:shadow-md active:scale-95"
                                        >
                                            Terapkan Filter
                                        </button>
                                    </div>
                                </div>
                            </div>

                            {/* Status Count & Summary */}
                            <div className="stagger-4 flex items-center justify-between px-1 text-xs text-[#5F5F64]">
                                <div className="flex items-center gap-1.5">
                                    <UsersRound className="h-3.5 w-3.5 text-[#87630E]" />
                                    <span>
                                        Menampilkan{' '}
                                        <strong className="font-semibold text-[#17171A]">
                                            {alumni.data.length}
                                        </strong>{' '}
                                        dari total{' '}
                                        <strong className="font-semibold text-[#17171A]">
                                            {alumni.total}
                                        </strong>{' '}
                                        alumni terdaftar
                                    </span>
                                </div>
                                {isFiltered && (
                                    <span className="rounded bg-[#F4E9CD]/50 px-2 py-0.5 text-[11px] text-[#87630E]">
                                        Filter aktif
                                    </span>
                                )}
                            </div>
                        </form>
                    </div>
                </section>

                {/* Main Table / Directory List */}
                <main className="alumni-shell pt-8">
                    {alumni.data.length === 0 ? (
                        <div className="scroll-reveal is-visible my-6 rounded-2xl border border-[#E7E3DF] bg-white p-12 text-center shadow-xs">
                            <div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-[#F8EEEF] text-[#7A1F2A]">
                                <GraduationCap className="h-7 w-7" />
                            </div>
                            <h2 className="alumni-display text-xl font-bold text-[#17171A]">
                                Data Alumni Tidak Ditemukan
                            </h2>
                            <p className="mx-auto mt-2 max-w-md text-xs leading-relaxed text-[#5F5F64] sm:text-sm">
                                Tidak ada data alumni yang cocok dengan
                                pencarian atau filter yang dipilih. Silakan ubah
                                kata kunci atau bersihkan filter.
                            </p>
                            {isFiltered && (
                                <button
                                    type="button"
                                    onClick={handleReset}
                                    className="mt-6 inline-flex h-10 items-center gap-2 rounded-lg bg-[#7A1F2A] px-5 text-xs font-semibold text-white shadow-xs transition-colors hover:bg-[#681923] active:scale-[0.98]"
                                >
                                    Bersihkan Semua Filter
                                </button>
                            )}
                        </div>
                    ) : (
                        <div className="stagger-5 overflow-hidden rounded-2xl border border-[#E7E3DF] bg-white shadow-xs">
                            {/* Table Header */}
                            <div className="hidden gap-4 border-b border-[#E7E3DF] bg-[#FAF9F7] px-6 py-4 text-[11px] font-bold tracking-wider text-[#5F5F64] uppercase lg:grid lg:grid-cols-12">
                                <div className="col-span-5">
                                    Nama Lengkap & NPM
                                </div>
                                <div className="col-span-3">Program Studi</div>
                                <div className="col-span-2">
                                    Tahun Kelulusan
                                </div>
                                <div className="col-span-2 text-right">
                                    Aksi Profil
                                </div>
                            </div>

                            {/* Rows */}
                            <div className="divide-y divide-[#E7E3DF]">
                                {alumni.data.map((item, idx) => {
                                    const prodiName = getProdi(item);
                                    const tahunVal = getTahunLulus(item);

                                    return (
                                        <article
                                            key={item.npm}
                                            style={{
                                                animationDelay: `${Math.min(idx * 45 + 100, 600)}ms`,
                                            }}
                                            className="stagger-1 group p-5 transition-all duration-200 hover:bg-[#FAF8F5] sm:p-6 lg:px-6 lg:py-4"
                                        >
                                            <div className="grid grid-cols-1 items-center gap-3 lg:grid-cols-12 lg:gap-4">
                                                {/* Identitas Alumni */}
                                                <div className="min-w-0 lg:col-span-5">
                                                    <h2 className="truncate text-base font-semibold text-[#17171A] transition-colors group-hover:text-[#7A1F2A]">
                                                        <Link
                                                            href={`/alumni/${item.npm}`}
                                                            className="hover:underline focus:outline-hidden"
                                                        >
                                                            {item.nama}
                                                        </Link>
                                                    </h2>
                                                    <div className="mt-1 flex flex-wrap items-center gap-2">
                                                        <span className="rounded-md border border-[#E7E3DF] bg-[#F7F6F3] px-2 py-0.5 font-mono text-xs text-[#5F5F64]">
                                                            NPM {item.npm}
                                                        </span>
                                                        {item.noSkpi && (
                                                            <span className="inline-flex items-center gap-1 rounded-md bg-[#EBF5EF] px-2 py-0.5 text-[11px] font-medium text-[#2F7D4A]">
                                                                <CheckCircle2 className="h-3 w-3" />{' '}
                                                                SKPI
                                                                Terverifikasi
                                                            </span>
                                                        )}
                                                    </div>
                                                </div>

                                                {/* Program Studi */}
                                                <div className="text-sm text-[#17171A] lg:col-span-3">
                                                    <span className="mr-1.5 text-xs font-medium text-[#5F5F64] lg:hidden">
                                                        Prodi:
                                                    </span>
                                                    <span className="font-medium text-[#242428]">
                                                        {prodiName}
                                                    </span>
                                                </div>

                                                {/* Tahun Lulus */}
                                                <div className="flex items-center gap-1.5 text-sm text-[#5F5F64] lg:col-span-2">
                                                    <span className="text-xs font-medium text-[#5F5F64] lg:hidden">
                                                        Status:
                                                    </span>
                                                    <div className="flex items-center gap-1.5">
                                                        <Calendar className="h-3.5 w-3.5 text-[#87630E]" />
                                                        <span className="font-medium text-[#17171A]">
                                                            {tahunVal !== '-'
                                                                ? `Lulus ${tahunVal}`
                                                                : 'Aktif / Belum Lulus'}
                                                        </span>
                                                    </div>
                                                </div>

                                                {/* Tombol Aksi */}
                                                <div className="flex items-center justify-end gap-2 border-t border-[#F2EFEB] pt-3 lg:col-span-2 lg:border-t-0 lg:pt-0">
                                                    <Link
                                                        href={`/alumni/${encodeURIComponent(item.npm)}#skpi`}
                                                        className="inline-flex h-9 items-center gap-1 rounded-lg border border-transparent px-3 text-xs font-semibold text-[#5F5F64] transition-all duration-200 hover:border-[#D7D1CC] hover:bg-white hover:text-[#87630E] active:scale-95"
                                                        title="Cek Surat Keterangan Pendamping Ijazah"
                                                    >
                                                        <Award className="h-3.5 w-3.5" />
                                                        <span>SKPI</span>
                                                    </Link>
                                                    <Link
                                                        href={`/alumni/${item.npm}`}
                                                        className="inline-flex h-9 items-center gap-1 rounded-lg bg-[#F8EEEF] px-3.5 text-xs font-semibold text-[#7A1F2A] transition-all duration-200 hover:bg-[#7A1F2A] hover:text-white active:scale-95"
                                                    >
                                                        <span>Profil</span>
                                                        <ArrowRight className="hover-slide-arrow h-3.5 w-3.5" />
                                                    </Link>
                                                </div>
                                            </div>
                                        </article>
                                    );
                                })}
                            </div>
                        </div>
                    )}

                    {/* Pagination */}
                    {alumni.last_page > 1 && (
                        <nav
                            className="stagger-6 mt-10 flex flex-wrap items-center justify-center gap-1 sm:gap-2"
                            aria-label="Navigasi Halaman"
                        >
                            {alumni.current_page > 1 && (
                                <Link
                                    href={`/alumni?page=${alumni.current_page - 1}${search ? `&search=${encodeURIComponent(search)}` : ''}${prodi ? `&prodi=${encodeURIComponent(prodi)}` : ''}${tahunLulus ? `&tahun_lulus=${encodeURIComponent(tahunLulus)}` : ''}`}
                                    className="flex h-10 items-center justify-center rounded-xl border border-[#D7D1CC] bg-white px-3 text-xs font-semibold text-[#17171A] transition-all duration-200 hover:border-[#7A1F2A] hover:bg-[#FAF8F5] active:scale-95"
                                    aria-label="Halaman sebelumnya"
                                >
                                    <ChevronLeft className="mr-1 h-4 w-4" />
                                    <span className="hidden sm:inline">Sebelumnya</span>
                                </Link>
                            )}

                            {pagination.map((p) => {
                                if (typeof p === 'string') return <span key={p} aria-hidden="true" className="px-1 text-sm text-[#5F5F64]">…</span>;
                                const isCurrent = alumni.current_page === p;
                                return (
                                    <Link
                                        key={p}
                                        href={`/alumni?page=${p}${search ? `&search=${encodeURIComponent(search)}` : ''}${prodi ? `&prodi=${encodeURIComponent(prodi)}` : ''}${tahunLulus ? `&tahun_lulus=${encodeURIComponent(tahunLulus)}` : ''}`}
                                        aria-current={
                                            isCurrent ? 'page' : undefined
                                        }
                                        className={`flex h-10 min-w-8 items-center justify-center rounded-md px-2 sm:min-w-10 sm:px-3.5 text-xs font-semibold transition-all duration-200 active:scale-95 ${
                                            isCurrent
                                                ? 'bg-[#7A1F2A] font-bold text-white shadow-xs'
                                                : 'border border-[#D7D1CC] bg-white text-[#17171A] hover:border-[#7A1F2A] hover:bg-[#FAF8F5]'
                                        }`}
                                    >
                                        {p}
                                    </Link>
                                );
                            })}

                            {alumni.current_page < alumni.last_page && (
                                <Link
                                    href={`/alumni?page=${alumni.current_page + 1}${search ? `&search=${encodeURIComponent(search)}` : ''}${prodi ? `&prodi=${encodeURIComponent(prodi)}` : ''}${tahunLulus ? `&tahun_lulus=${encodeURIComponent(tahunLulus)}` : ''}`}
                                    className="flex h-10 items-center justify-center rounded-xl border border-[#D7D1CC] bg-white px-3 text-xs font-semibold text-[#17171A] transition-all duration-200 hover:border-[#7A1F2A] hover:bg-[#FAF8F5] active:scale-95"
                                    aria-label="Halaman berikutnya"
                                >
                                    <span className="hidden sm:inline">Selanjutnya</span>
                                    <ChevronRight className="ml-1 h-4 w-4" />
                                </Link>
                            )}
                        </nav>
                    )}
                </main>
            </div>
        </PortalLayout>
    );
}
