import React, { useState, useEffect } from 'react';
import { Head, Link } from '@inertiajs/react';
import PortalLayout from '@/layouts/portal-layout';
import {
    CheckCircle2,
    Clock,
    XCircle,
    HeartHandshake,
    RotateCw,
    FlaskConical,
    TriangleAlert,
} from 'lucide-react';
import '../../../css/alumni-home.css';

interface StatusProps {
    donation: {
        // id TIDAK ada — hanya access_token yang dikirim dari server
        access_token: string;
        payment_status: string;
        amount: number | string;
        program_name: string;
        paid_at?: string | null;
    };
    isSandbox?: boolean;
}

export default function DonationStatusPage({
    donation,
    isSandbox = false,
}: StatusProps) {
    const [currentStatus, setCurrentStatus] = useState(donation.payment_status);
    const [polling, setPolling] = useState(
        donation.payment_status === 'PENDING_PAYMENT' ||
            donation.payment_status === 'CREATED',
    );
    const [simLoading, setSimLoading] = useState(false);
    const [simMessage, setSimMessage] = useState('');

    useEffect(() => {
        if (!polling) return;

        const interval = setInterval(async () => {
            try {
                // Polling pakai access_token — id integer tidak pernah dikirim ke browser
                const res = await fetch(
                    `/api/v1/alumni-bergerak/donations/${donation.access_token}/status`,
                );
                const json = await res.json();
                if (json.payment_status) {
                    setCurrentStatus(json.payment_status);
                    if (
                        ['PAID', 'FAILED', 'EXPIRED'].includes(
                            json.payment_status,
                        )
                    ) {
                        setPolling(false);
                    }
                }
            } catch {
                // Ignore transient polling error
            }
        }, 3500);

        return () => clearInterval(interval);
    }, [polling, donation.access_token]);

    // Simulasi webhook sandbox — semua via access_token, tidak ada id
    const simulateStatus = async (status: 'PAID' | 'EXPIRED' | 'FAILED') => {
        setSimLoading(true);
        setSimMessage('');
        try {
            const csrfMeta = document.querySelector<HTMLMetaElement>(
                'meta[name="csrf-token"]',
            );
            const res = await fetch(
                `/dev/simulate-payment/${donation.access_token}?status=${status}`,
                {
                    method: 'POST',
                    headers: {
                        'X-CSRF-TOKEN': csrfMeta?.content ?? '',
                        'Content-Type': 'application/json',
                    },
                },
            );
            const json = await res.json();
            setCurrentStatus(json.payment_status ?? status);
            setPolling(false);
            setSimMessage(
                json.message ?? `Status berhasil diubah ke ${status}`,
            );
        } catch {
            setSimMessage(
                'Gagal mengirim simulasi. Pastikan dev server berjalan.',
            );
        } finally {
            setSimLoading(false);
        }
    };

    const isPaid = currentStatus === 'PAID';
    const isPending =
        currentStatus === 'PENDING_PAYMENT' || currentStatus === 'CREATED';

    return (
        <PortalLayout>
            <Head title="Status Donasi - Alumni Bergerak FT UNMA" />

            <div className="alumni-home min-h-screen py-16">
                <div className="alumni-shell mx-auto max-w-xl">
                    {/* SANDBOX BADGE */}
                    {isSandbox && (
                        <div className="mb-4 flex items-center gap-2 rounded-xl border border-amber-300 bg-amber-50 px-4 py-2.5 text-xs font-semibold text-amber-800">
                            <FlaskConical className="h-4 w-4 shrink-0" />
                            <span>
                                Mode Sandbox / Testing — transaksi ini{' '}
                                <strong>tidak memotong uang asli</strong>.
                            </span>
                        </div>
                    )}

                    <div className="stagger-2 space-y-6 rounded-2xl border border-[#E7E3DF] bg-white p-7 text-center shadow-xs sm:p-10">
                        {isPaid ? (
                            <div className="mx-auto flex h-16 w-16 items-center justify-center rounded-full border border-emerald-200 bg-emerald-50 text-emerald-600">
                                <CheckCircle2 className="h-9 w-9 stroke-2" />
                            </div>
                        ) : isPending ? (
                            <div className="mx-auto flex h-16 w-16 items-center justify-center rounded-full border border-amber-200 bg-amber-50 text-amber-600">
                                <Clock className="h-9 w-9 animate-pulse stroke-2" />
                            </div>
                        ) : (
                            <div className="mx-auto flex h-16 w-16 items-center justify-center rounded-full border border-red-200 bg-red-50 text-red-600">
                                <XCircle className="h-9 w-9 stroke-2" />
                            </div>
                        )}

                        <div className="space-y-1">
                            <span className="block text-[11px] font-bold tracking-wider text-[#87630E] uppercase">
                                STATUS TRANSAKSI{' '}
                                {isSandbox ? '(SANDBOX)' : 'RESMI'}
                            </span>
                            <h1 className="font-serif text-xl font-bold text-[#17171A] sm:text-2xl">
                                {isPaid
                                    ? 'Pembayaran Donasi Berhasil!'
                                    : isPending
                                      ? 'Menunggu Konfirmasi Pembayaran'
                                      : 'Pembayaran Gagal / Kedaluwarsa'}
                            </h1>
                            <p className="mx-auto max-w-sm text-xs text-slate-500 sm:text-sm">
                                {isPaid
                                    ? 'Terima kasih atas kontribusi Anda untuk kemajuan Fakultas Teknik Universitas Majalengka.'
                                    : isPending
                                      ? 'Transaksi sedang diproses. Halaman ini memperbarui status secara otomatis.'
                                      : 'Transaksi donasi tidak dapat diselesaikan atau telah melewati batas waktu pembayaran.'}
                            </p>
                        </div>

                        {/* Rincian Transaksi */}
                        <div className="space-y-2.5 rounded-xl border border-[#E7E3DF] bg-[#FAF8F5] p-4 text-left text-xs">
                            <div className="flex items-center justify-between border-b border-slate-200/60 py-1">
                                <span className="text-slate-500">Program</span>
                                <span className="font-semibold text-[#17171A]">
                                    {donation.program_name}
                                </span>
                            </div>
                            <div className="flex items-center justify-between border-b border-slate-200/60 py-1">
                                <span className="text-slate-500">
                                    Nominal Donasi
                                </span>
                                <span className="font-mono font-bold text-[#7A1F2A]">
                                    Rp{' '}
                                    {Number(donation.amount).toLocaleString(
                                        'id-ID',
                                    )}
                                </span>
                            </div>
                            <div className="flex items-center justify-between py-1">
                                <span className="text-slate-500">Status</span>
                                <span
                                    className={`inline-flex items-center gap-1 rounded px-2 py-0.5 text-[11px] font-semibold ${
                                        isPaid
                                            ? 'border border-emerald-200 bg-emerald-50 text-emerald-700'
                                            : isPending
                                              ? 'border border-amber-200 bg-amber-50 text-amber-700'
                                              : 'border border-red-200 bg-red-50 text-red-700'
                                    }`}
                                >
                                    {isPaid ? (
                                        <CheckCircle2 className="h-3 w-3" />
                                    ) : isPending ? (
                                        <RotateCw className="h-3 w-3 animate-spin" />
                                    ) : null}
                                    <span>{currentStatus}</span>
                                </span>
                            </div>
                        </div>

                        {/* SANDBOX DEV PANEL — hanya tampil di mode sandbox + status masih pending */}
                        {isSandbox && isPending && (
                            <div className="space-y-3 rounded-xl border border-amber-200 bg-amber-50 p-4 text-left">
                                <div className="flex items-center gap-2 text-amber-800">
                                    <FlaskConical className="h-4 w-4 shrink-0" />
                                    <span className="text-xs font-bold tracking-wider uppercase">
                                        Panel Simulasi Sandbox
                                    </span>
                                </div>
                                <p className="text-xs leading-relaxed text-amber-700">
                                    Simulasikan respons webhook Mayar tanpa
                                    bayar asli. Hanya aktif saat{' '}
                                    <code className="rounded bg-amber-100 px-1">
                                        APP_ENV=local
                                    </code>
                                    .
                                </p>

                                {simMessage && (
                                    <div className="rounded-lg border border-emerald-200 bg-emerald-50 px-3 py-2 text-xs font-medium text-emerald-700">
                                        ✓ {simMessage}
                                    </div>
                                )}

                                <div className="flex flex-wrap gap-2">
                                    <button
                                        type="button"
                                        disabled={simLoading}
                                        onClick={() => simulateStatus('PAID')}
                                        className="rounded-lg bg-emerald-600 px-3 py-1.5 text-xs font-semibold text-white transition-all hover:bg-emerald-700 disabled:opacity-50"
                                    >
                                        {simLoading
                                            ? 'Memproses...'
                                            : '✓ Simulasi PAID'}
                                    </button>
                                    <button
                                        type="button"
                                        disabled={simLoading}
                                        onClick={() =>
                                            simulateStatus('EXPIRED')
                                        }
                                        className="rounded-lg bg-slate-500 px-3 py-1.5 text-xs font-semibold text-white transition-all hover:bg-slate-600 disabled:opacity-50"
                                    >
                                        Simulasi EXPIRED
                                    </button>
                                    <button
                                        type="button"
                                        disabled={simLoading}
                                        onClick={() => simulateStatus('FAILED')}
                                        className="rounded-lg bg-red-500 px-3 py-1.5 text-xs font-semibold text-white transition-all hover:bg-red-600 disabled:opacity-50"
                                    >
                                        Simulasi FAILED
                                    </button>
                                </div>

                                <p className="flex items-start gap-1.5 text-[11px] text-amber-600">
                                    <TriangleAlert className="mt-0.5 h-3.5 w-3.5 shrink-0" />
                                    Panel ini tidak tampil di production.
                                </p>
                            </div>
                        )}

                        {/* Navigasi Balik */}
                        <div className="flex flex-col justify-center gap-3 pt-2 sm:flex-row">
                            <Link
                                href="/alumni-bergerak"
                                className="inline-flex items-center justify-center gap-2 rounded-xl bg-[#7A1F2A] px-5 py-2.5 text-xs font-semibold text-white shadow-xs transition-all hover:bg-[#681923] active:scale-95"
                            >
                                <HeartHandshake className="h-4 w-4 text-[#E8D9A3]" />
                                <span>Kembali ke Alumni Bergerak</span>
                            </Link>
                            <Link
                                href="/"
                                className="inline-flex items-center justify-center gap-1.5 rounded-xl border border-[#D7D1CC] px-4 py-2.5 text-xs font-semibold text-slate-700 transition-colors hover:bg-slate-50"
                            >
                                <span>Ke Halaman Utama</span>
                            </Link>
                        </div>
                    </div>
                </div>
            </div>
        </PortalLayout>
    );
}
