import { Head, Link, useForm } from '@inertiajs/react';
import {
    ArrowRight,
    CheckCircle2,
    Mail,
    Newspaper,
    Plus,
    Wallet,
} from 'lucide-react';
import AppLayout from '@/layouts/app-layout';

interface DashboardProps {
    metrics: {
        pending_activities: number;
        pending_donations: number;
        total_donations: number | string;
        unread_messages: number;
    };
    pendingActivities: {
        id: number;
        title: string;
        alumni_name_snapshot: string;
        program_studi_snapshot: string;
        activity_date: string | null;
    }[];
    pendingDonations: {
        id: number;
        alumni_name_snapshot: string;
        amount: number | string;
        program: { name: string } | null;
    }[];
}

const rupiah = (value: number | string) =>
    new Intl.NumberFormat('id-ID', {
        style: 'currency',
        currency: 'IDR',
        maximumFractionDigits: 0,
    }).format(Number(value));

function activityDate(value: string | null) {
    if (!value) return 'Tanggal belum diisi';
    const date = new Date(value);
    return Number.isNaN(date.getTime())
        ? 'Tanggal tidak tersedia'
        : date.toLocaleDateString('id-ID', {
              day: 'numeric',
              month: 'short',
              year: 'numeric',
              timeZone: 'Asia/Jakarta',
          });
}

export default function AdminDashboard({
    metrics,
    pendingActivities,
    pendingDonations,
}: DashboardProps) {
    const refresh = useForm({});
    return (
        <AppLayout
            breadcrumbs={[{ title: 'Dashboard', href: '/admin/dashboard' }]}
        >
            <Head title="Dashboard Admin | Portal Alumni FT UNMA">
                <meta
                    name="description"
                    content="Ringkasan administrasi kegiatan alumni, pembayaran donasi, dan pesan masuk Fakultas Teknik Universitas Majalengka."
                />
                <meta name="robots" content="noindex, nofollow" />
            </Head>
            <div className="admin-overview">
                <div className="admin-overview-inner">
                    {/* Hero Banner */}
                    <header className="admin-overview-heading">
                        <div>
                            <p className="admin-eyebrow">
                                Administrasi / Fakultas Teknik UNMA
                            </p>
                            <h1>Ringkasan portal alumni</h1>
                            <p className="admin-intro">
                                Tinjau kegiatan alumni, pantau kontribusi yang
                                masuk, dan tanggapi pesan untuk fakultas.
                            </p>
                        </div>
                        <Link
                            id="dashboard-create-news"
                            href="/admin/news"
                            className="admin-primary-link"
                        >
                            <Plus aria-hidden="true" /> Kelola berita
                        </Link>
                    </header>

                    {/* Stat Cards */}
                    <dl
                        className="admin-metrics"
                        aria-label="Ringkasan data portal"
                    >
                        <div className="admin-metric">
                            <dt>Dana terhimpun</dt>
                            <dd>{rupiah(metrics.total_donations)}</dd>
                            <p>Total pembayaran berstatus lunas</p>
                        </div>
                        <div className="admin-metric">
                            <dt>Kegiatan menunggu tinjauan</dt>
                            <dd>
                                {metrics.pending_activities.toLocaleString(
                                    'id-ID',
                                )}
                            </dd>
                            <p>Kiriman alumni belum dimoderasi</p>
                        </div>
                        <div className="admin-metric">
                            <dt>Menunggu pembayaran</dt>
                            <dd>
                                {metrics.pending_donations.toLocaleString(
                                    'id-ID',
                                )}
                            </dd>
                            <p>Transaksi donasi belum lunas</p>
                        </div>
                        <div className="admin-metric">
                            <dt>Pesan belum dibaca</dt>
                            <dd>
                                {metrics.unread_messages.toLocaleString(
                                    'id-ID',
                                )}
                            </dd>
                            <p>Pesan dari formulir kontak</p>
                        </div>
                    </dl>

                    {/* Review Queues */}
                    <div className="admin-columns">
                        <div>
                            {/* Kegiatan Queue */}
                            <section
                                className="admin-panel"
                                aria-labelledby="dashboard-activities-title"
                            >
                                <div className="admin-panel-header">
                                    <div>
                                        <h2 id="dashboard-activities-title">
                                            Kegiatan perlu ditinjau
                                        </h2>
                                        <p>
                                            Maksimal 5 kiriman terbaru yang
                                            menunggu moderasi.
                                        </p>
                                    </div>
                                    <Link
                                        id="dashboard-all-activities"
                                        href="/admin/activities"
                                        className="admin-text-link"
                                    >
                                        Lihat kegiatan{' '}
                                        <ArrowRight aria-hidden="true" />
                                    </Link>
                                </div>
                                {pendingActivities.length ? (
                                    pendingActivities.map((activity) => (
                                        <article
                                            key={activity.id}
                                            className="admin-activity"
                                        >
                                            <div>
                                                <time
                                                    dateTime={
                                                        activity.activity_date ??
                                                        undefined
                                                    }
                                                >
                                                    {activityDate(
                                                        activity.activity_date,
                                                    )}
                                                </time>
                                                <h3>{activity.title}</h3>
                                                <p>
                                                    {
                                                        activity.alumni_name_snapshot
                                                    }
                                                    {activity.program_studi_snapshot
                                                        ? ` · ${activity.program_studi_snapshot}`
                                                        : ''}
                                                </p>
                                            </div>
                                            <Link
                                                id={`dashboard-review-${activity.id}`}
                                                href="/admin/activities"
                                                className="admin-text-link"
                                                aria-label={`Buka moderasi kegiatan: ${activity.title}`}
                                            >
                                                Tinjau{' '}
                                                <ArrowRight aria-hidden="true" />
                                            </Link>
                                        </article>
                                    ))
                                ) : (
                                    <div className="admin-empty">
                                        <CheckCircle2 aria-hidden="true" />
                                        <h3>
                                            Tidak ada kegiatan menunggu tinjauan
                                        </h3>
                                        <p>
                                            Kiriman baru dari alumni akan muncul
                                            di sini sebelum dipublikasikan.
                                        </p>
                                    </div>
                                )}
                            </section>

                            {/* Donasi Queue */}
                            <section
                                className="admin-panel"
                                aria-labelledby="dashboard-payments-title"
                            >
                                <div className="admin-panel-header">
                                    <div>
                                        <h2 id="dashboard-payments-title">
                                            Menunggu pembayaran
                                        </h2>
                                        <p>
                                            Status diperbarui melalui konfirmasi
                                            pembayaran otomatis.
                                        </p>
                                    </div>
                                </div>
                                {pendingDonations.length ? (
                                    pendingDonations.map((donation) => (
                                        <div
                                            key={donation.id}
                                            className="admin-payment-row"
                                        >
                                            <div>
                                                <strong>
                                                    {
                                                        donation.alumni_name_snapshot
                                                    }
                                                </strong>
                                                <p>
                                                    {donation.program?.name ??
                                                        'Program tidak tersedia'}{' '}
                                                    · #{donation.id}
                                                </p>
                                            </div>
                                            <span>
                                                {rupiah(donation.amount)}
                                            </span>
                                        </div>
                                    ))
                                ) : (
                                    <div className="admin-empty">
                                        <Wallet aria-hidden="true" />
                                        <h3>Tidak ada pembayaran tertunda</h3>
                                        <p>
                                            Transaksi yang menunggu pembayaran
                                            akan ditampilkan di sini. Dana baru
                                            dihitung setelah pembayaran lunas.
                                        </p>
                                    </div>
                                )}
                            </section>
                        </div>
                        <aside aria-label="Pesan dan pengelolaan portal">
                            <section className="admin-panel admin-side-content" aria-labelledby="alumni-cache-title">
                                <h2 id="alumni-cache-title">Data alumni</h2>
                                <p>Salinan lokal diperbarui setiap 30 hari saat direktori diakses. Jika API tidak tersedia, data terakhir tetap ditampilkan.</p>
                                <button id="refresh-alumni-cache" type="button" className="admin-cache-action"
                                    disabled={refresh.processing} aria-busy={refresh.processing}
                                    onClick={() => refresh.post('/admin/alumni/refresh', { preserveScroll: true })}>
                                    {refresh.processing ? 'Memperbarui data…' : 'Perbarui data alumni'}
                                </button>
                                {Object.values(refresh.errors).map((message, index) => <p role="alert" key={index}>{String(message)}</p>)}
                                {refresh.recentlySuccessful && <p role="status">Data alumni berhasil diperbarui.</p>}
                            </section>
                            <section className="admin-panel admin-side-content">
                                <h2>
                                    <Mail aria-hidden="true" /> Pesan masuk
                                </h2>
                                <p>
                                    {metrics.unread_messages > 0
                                        ? `Ada ${metrics.unread_messages.toLocaleString('id-ID')} pesan yang belum dibaca. Periksa pertanyaan dan kebutuhan pengirim.`
                                        : 'Semua pesan sudah dibaca. Pesan baru dari halaman kontak akan tercatat di sini.'}
                                </p>
                                <Link
                                    id="dashboard-inbox"
                                    href="/admin/messages"
                                    className="admin-text-link"
                                >
                                    Buka kotak masuk{' '}
                                    <ArrowRight aria-hidden="true" />
                                </Link>
                            </section>
                            <section
                                className="admin-panel"
                                aria-labelledby="dashboard-publishing-title"
                            >
                                <div className="admin-panel-header">
                                    <h2 id="dashboard-publishing-title">
                                        Publikasi & portal
                                    </h2>
                                </div>
                                <Link
                                    id="dashboard-news"
                                    href="/admin/news"
                                    className="admin-shortcut"
                                >
                                    <span>
                                        <strong>Berita fakultas</strong>
                                        <small>
                                            Kelola berita dan pengumuman
                                        </small>
                                    </span>
                                    <Newspaper aria-hidden="true" />
                                </Link>
                                <Link
                                    id="dashboard-public-home"
                                    href="/"
                                    className="admin-shortcut"
                                >
                                    <span>
                                        <strong>Lihat halaman utama</strong>
                                        <small>
                                            Periksa tampilan untuk pengunjung
                                        </small>
                                    </span>
                                    <ArrowRight aria-hidden="true" />
                                </Link>
                                <Link
                                    id="dashboard-transparency"
                                    href="/alumni-bergerak"
                                    className="admin-shortcut"
                                >
                                    <span>
                                        <strong>Alumni Bergerak</strong>
                                        <small>
                                            Lihat program dan transparansi dana
                                        </small>
                                    </span>
                                    <ArrowRight aria-hidden="true" />
                                </Link>
                            </section>
                        </aside>
                    </div>

                    {/* Footer Info */}
                    <p className="admin-footnote">
                        Ringkasan berdasarkan data saat halaman dimuat. Status
                        pembayaran tidak diubah melalui persetujuan manual
                        admin.
                    </p>
                </div>
            </div>
        </AppLayout>
    );
}
