import { useEffect, useState } from 'react';
import { Head, Link, useForm } from '@inertiajs/react';
import PortalLayout from '@/layouts/portal-layout';
import { CheckCircle2, AlertCircle, Search, ArrowRight } from 'lucide-react';
import '../../../css/alumni-home.css';

interface Alumni {
    npm: string;
    nama: string;
    prodi: string;
    tahun_lulus: string | number;
}

function getCsrfToken(): string {
    return decodeURIComponent(
        document.cookie
            .split('; ')
            .find((c) => c.startsWith('XSRF-TOKEN='))
            ?.slice(11) ?? '',
    );
}

export default function KirimKegiatan() {
    const form = useForm({
        submission_type: 'activity',
        news_category: 'Lowongan Kerja',
        npm: '',
        title: '',
        description: '',
        activity_date: '',
        institution_company: '',
        location: '',
        documentation: null as File | null,
    });

    const [alumni, setAlumni] = useState<Alumni | null>(null);
    const [lookingUp, setLookingUp] = useState(false);
    const [lookupError, setLookupError] = useState('');
    const [showSuccessModal, setShowSuccessModal] = useState(false);
    const [preview, setPreview] = useState('');
    const [fileKey, setFileKey] = useState(0);

    useEffect(() => {
        if (!form.data.documentation) {
            setPreview('');
            return;
        }
        const url = URL.createObjectURL(form.data.documentation);
        setPreview(url);
        return () => URL.revokeObjectURL(url);
    }, [form.data.documentation]);

    // Verifikasi NPM langsung ke SIMAK — tanpa OTP
    async function handleVerifyNpm() {
        const trimmed = form.data.npm.trim();
        if (!trimmed) {
            setLookupError('Masukkan NPM terlebih dahulu.');
            return;
        }
        setLookingUp(true);
        setLookupError('');

        try {
            const response = await fetch('/api/verify-alumni-npm', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    Accept: 'application/json',
                    'X-XSRF-TOKEN': getCsrfToken(),
                },
                body: JSON.stringify({ npm: trimmed }),
            });

            const json = await response.json();
            if (response.ok && json.success && json.data) {
                setAlumni(json.data);
                setLookupError('');
            } else {
                setLookupError(
                    response.status === 429
                        ? 'Terlalu banyak percobaan. Tunggu beberapa menit lalu coba lagi.'
                        : json.message ||
                              'NPM tidak ditemukan. Pastikan NPM yang Anda masukkan sudah benar.',
                );
            }
        } catch {
            setLookupError('Gagal terhubung ke server. Periksa koneksi internet Anda.');
        } finally {
            setLookingUp(false);
        }
    }

    function resetAlumni() {
        setAlumni(null);
        setLookupError('');
    }

    return (
        <PortalLayout>
            <Head title="Kirim Berita dan Kegiatan | FT UNMA">
                <meta
                    name="description"
                    content="Bagikan kegiatan, pengalaman karier, dan prestasi alumni Fakultas Teknik Universitas Majalengka untuk ditinjau oleh admin fakultas."
                />
            </Head>

            <div className="activity-submit">
                <header className="activity-submit-header">
                    <div className="alumni-shell">
                        <nav aria-label="Breadcrumb">
                            <Link id="activity-home" href="/">
                                Beranda
                            </Link>{' '}
                            / Kirim berita dan kegiatan
                        </nav>
                        <h1>Kirim berita dan kegiatan alumni.</h1>
                        <p>
                            Pengalaman karier, penelitian, pengabdian, hingga
                            prestasi. Ceritakan perjalanan Anda sebagai bagian
                            dari alumni Fakultas Teknik UNMA.
                        </p>
                    </div>
                </header>

                <div className="alumni-shell activity-submit-grid">
                    <aside className="activity-submit-guide">
                        <h2>Sebelum mengirim</h2>
                        <p>
                            Masukkan NPM Anda untuk diverifikasi ke basis data
                            alumni fakultas. Tidak perlu kode OTP — cukup NPM
                            yang Anda miliki.
                        </p>
                        <p>
                            Foto dokumentasi bersifat opsional. Gunakan foto
                            milik Anda atau yang telah mendapat izin untuk
                            dipublikasikan.
                        </p>
                        <h2>Ditinjau sebelum terbit</h2>
                        <p>
                            Kiriman masuk ke antrean admin fakultas dan tidak
                            langsung tampil di portal.
                        </p>
                        <Link id="activity-help" href="/contact">
                            Butuh bantuan? Hubungi fakultas
                        </Link>
                    </aside>

                    <form
                        className="activity-submit-form"
                        onSubmit={(e) => {
                            e.preventDefault();
                            if (!alumni) return;
                            form.post('/api/v1/activities', {
                                forceFormData: true,
                                onSuccess: () => {
                                    form.reset();
                                    resetAlumni();
                                    setFileKey((k) => k + 1);
                                    setShowSuccessModal(true);
                                },
                            });
                        }}
                    >
                        {form.wasSuccessful && (
                            <div
                                className="activity-submit-notice"
                                role="status"
                                style={{
                                    borderLeftColor: '#10b981',
                                    background: '#ecfdf5',
                                    color: '#065f46',
                                }}
                            >
                                Kegiatan berhasil dikirim. Admin fakultas akan
                                meninjau kiriman Anda sebelum dipublikasikan.
                            </div>
                        )}

                        {Object.keys(form.errors).length > 0 && (
                            <div className="activity-submit-notice" role="alert">
                                {Object.entries(form.errors).map(([key, message]) => (
                                    <p key={key} className="activity-submit-error">
                                        {message}
                                    </p>
                                ))}
                            </div>
                        )}

                        {/* VERIFIKASI NPM */}
                        <fieldset>
                            <legend>Verifikasi Identitas Alumni</legend>

                            {!alumni ? (
                                <div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>
                                    <div className="activity-submit-field">
                                        <label htmlFor="activity-npm">
                                            NPM Alumni{' '}
                                            <span aria-hidden="true">*</span>
                                        </label>
                                        <div className="activity-npm-row">
                                            <input
                                                id="activity-npm"
                                                required
                                                maxLength={25}
                                                value={form.data.npm}
                                                disabled={lookingUp}
                                                placeholder="Contoh: 221410059 atau 22.14.1.0059"
                                                aria-describedby="activity-npm-help"
                                                onChange={(e) => {
                                                    form.setData('npm', e.target.value);
                                                    setLookupError('');
                                                }}
                                                onKeyDown={(e) => {
                                                    if (e.key === 'Enter') {
                                                        e.preventDefault();
                                                        handleVerifyNpm();
                                                    }
                                                }}
                                            />
                                            <button
                                                id="activity-check-npm"
                                                type="button"
                                                disabled={lookingUp || !form.data.npm.trim()}
                                                onClick={handleVerifyNpm}
                                                style={{ display: 'inline-flex', alignItems: 'center', gap: '6px' }}
                                            >
                                                {lookingUp ? (
                                                    'Memeriksa…'
                                                ) : (
                                                    <>
                                                        <Search size={14} />
                                                        Periksa NPM
                                                    </>
                                                )}
                                            </button>
                                        </div>
                                        <small id="activity-npm-help">
                                            Dukungan format ganda: tanpa titik (
                                            <code>221410059</code>) atau dengan
                                            titik (<code>22.14.1.0059</code>).
                                        </small>
                                    </div>

                                    {lookupError && (
                                        <div
                                            role="alert"
                                            style={{
                                                display: 'flex',
                                                alignItems: 'center',
                                                gap: '8px',
                                                padding: '10px 14px',
                                                background: '#fdf2f2',
                                                border: '1px solid #f8b4b4',
                                                borderRadius: '6px',
                                                color: '#991b1b',
                                                fontSize: '13px',
                                            }}
                                        >
                                            <AlertCircle size={16} style={{ flexShrink: 0 }} />
                                            <span>{lookupError}</span>
                                        </div>
                                    )}
                                </div>
                            ) : (
                                /* Badge identitas terverifikasi */
                                <div
                                    style={{
                                        background: '#f0fdf4',
                                        border: '1.5px solid #86efac',
                                        borderRadius: '10px',
                                        padding: '18px 22px',
                                        display: 'flex',
                                        justifyContent: 'space-between',
                                        alignItems: 'center',
                                        gap: '16px',
                                        flexWrap: 'wrap',
                                    }}
                                >
                                    <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>
                                        <div
                                            style={{
                                                width: '36px',
                                                height: '36px',
                                                borderRadius: '50%',
                                                background: '#dcfce7',
                                                color: '#16a34a',
                                                display: 'flex',
                                                alignItems: 'center',
                                                justifyContent: 'center',
                                                flexShrink: 0,
                                            }}
                                        >
                                            <CheckCircle2 size={20} />
                                        </div>
                                        <div>
                                            <strong style={{ fontSize: '15px', color: '#14532d', display: 'block' }}>
                                                {alumni.nama}
                                            </strong>
                                            <span style={{ fontSize: '13px', color: '#166534' }}>
                                                {alumni.prodi} · Lulus{' '}
                                                {alumni.tahun_lulus} (NPM:{' '}
                                                {alumni.npm})
                                            </span>
                                            <span
                                                style={{
                                                    display: 'block',
                                                    fontSize: '11px',
                                                    color: '#15803d',
                                                    marginTop: '2px',
                                                }}
                                            >
                                                ✓ Identitas alumni terverifikasi
                                            </span>
                                        </div>
                                    </div>
                                    <button
                                        type="button"
                                        style={{
                                            background: '#ffffff',
                                            color: '#374151',
                                            border: '1px solid #d1d5db',
                                            padding: '8px 14px',
                                            fontSize: '12px',
                                            fontWeight: 500,
                                            borderRadius: '6px',
                                        }}
                                        onClick={resetAlumni}
                                    >
                                        Ganti NPM
                                    </button>
                                </div>
                            )}
                        </fieldset>

                        {/* DETAIL KIRIMAN */}
                        <fieldset>
                            <legend>Detail kiriman</legend>

                            <div className="activity-submit-field">
                                <label htmlFor="submission-type">Jenis kiriman *</label>
                                <select
                                    id="submission-type"
                                    value={form.data.submission_type}
                                    onChange={(e) => form.setData('submission_type', e.target.value)}
                                >
                                    <option value="activity">Kegiatan alumni</option>
                                    <option value="news">Berita / lowongan / informasi</option>
                                </select>
                            </div>
                            {form.data.submission_type === 'news' && (
                                <div className="activity-submit-field">
                                    <label htmlFor="news-category">Kategori berita *</label>
                                    <select
                                        id="news-category"
                                        value={form.data.news_category}
                                        onChange={(e) => form.setData('news_category', e.target.value)}
                                    >
                                        {['Lowongan Kerja', 'Beasiswa', 'Informasi Alumni', 'Berita Lainnya'].map(
                                            (category) => (
                                                <option key={category}>{category}</option>
                                            ),
                                        )}
                                    </select>
                                    <small>
                                        Berita masuk sebagai draft untuk ditinjau admin. Cantumkan tautan
                                        pendaftaran dan batas waktu dalam isi berita.
                                    </small>
                                </div>
                            )}

                            <div className="activity-submit-field">
                                <label htmlFor="activity-title">
                                    Judul kiriman atau cerita karier *
                                </label>
                                <input
                                    id="activity-title"
                                    required
                                    maxLength={255}
                                    value={form.data.title}
                                    onChange={(e) => form.setData('title', e.target.value)}
                                />
                                <small>
                                    Contoh: Berbagi pengalaman sebagai insinyur pada kuliah tamu.
                                </small>
                            </div>

                            <div className="activity-submit-fields">
                                <div className="activity-submit-field">
                                    <label htmlFor="activity-date">Tanggal kegiatan (opsional)</label>
                                    <input
                                        id="activity-date"
                                        type="date"
                                        value={form.data.activity_date}
                                        onChange={(e) => form.setData('activity_date', e.target.value)}
                                    />
                                </div>
                                <div className="activity-submit-field">
                                    <label htmlFor="activity-location">Lokasi (opsional)</label>
                                    <input
                                        id="activity-location"
                                        maxLength={255}
                                        value={form.data.location}
                                        onChange={(e) => form.setData('location', e.target.value)}
                                    />
                                </div>
                            </div>

                            <div className="activity-submit-field">
                                <label htmlFor="activity-institution">
                                    Instansi atau perusahaan (opsional)
                                </label>
                                <input
                                    id="activity-institution"
                                    maxLength={255}
                                    value={form.data.institution_company}
                                    onChange={(e) => form.setData('institution_company', e.target.value)}
                                />
                            </div>

                            <div className="activity-submit-field">
                                <label htmlFor="activity-description">
                                    Isi berita atau cerita kegiatan *
                                </label>
                                <textarea
                                    id="activity-description"
                                    rows={6}
                                    required
                                    value={form.data.description}
                                    onChange={(e) => form.setData('description', e.target.value)}
                                />
                                <small>
                                    Jelaskan informasi dengan lengkap. Untuk lowongan, sertakan
                                    perusahaan, persyaratan, tautan resmi, dan batas pendaftaran.
                                </small>
                            </div>

                            <div className="activity-submit-field">
                                <label htmlFor="activity-photo">Foto dokumentasi (opsional)</label>
                                <input
                                    key={fileKey}
                                    id="activity-photo"
                                    type="file"
                                    accept="image/jpeg,image/png,image/webp"
                                    aria-describedby="activity-photo-help"
                                    onChange={(e) => {
                                        const file = e.target.files?.[0] ?? null;
                                        form.clearErrors('documentation');
                                        if (
                                            file &&
                                            (file.size > 3 * 1024 * 1024 ||
                                                !['image/jpeg', 'image/png', 'image/webp'].includes(file.type))
                                        ) {
                                            form.setError('documentation', 'Gunakan JPG, PNG, atau WebP maksimal 3 MB.');
                                            form.setData('documentation', null);
                                            e.target.value = '';
                                            return;
                                        }
                                        form.setData('documentation', file);
                                    }}
                                />
                                <small id="activity-photo-help">JPG, PNG, atau WebP. Maksimal 3 MB.</small>
                                {preview && (
                                    <img
                                        className="activity-submit-preview"
                                        src={preview}
                                        alt="Pratinjau foto kegiatan"
                                    />
                                )}
                            </div>
                        </fieldset>

                        <footer className="activity-submit-footer">
                            <p>
                                {alumni
                                    ? 'Pastikan informasi sudah benar sebelum mengirim.'
                                    : 'Verifikasi NPM alumni terlebih dahulu untuk mengirim berita atau kegiatan.'}{' '}
                                Kolom bertanda * wajib diisi.
                            </p>
                            <button
                                id="activity-send"
                                type="submit"
                                disabled={form.processing || !alumni}
                                style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}
                            >
                                {form.processing ? (
                                    'Mengirim…'
                                ) : (
                                    <>
                                        Kirim untuk ditinjau
                                        <ArrowRight size={16} />
                                    </>
                                )}
                            </button>
                        </footer>
                    </form>
                </div>
            </div>

            {/* POPUP MODAL SUKSES */}
            {showSuccessModal && (
                <div
                    role="dialog"
                    aria-modal="true"
                    aria-labelledby="success-modal-title"
                    style={{
                        position: 'fixed',
                        inset: 0,
                        backgroundColor: 'rgba(15, 23, 42, 0.65)',
                        backdropFilter: 'blur(4px)',
                        display: 'flex',
                        alignItems: 'center',
                        justifyContent: 'center',
                        zIndex: 9999,
                        padding: '16px',
                    }}
                >
                    <div
                        style={{
                            background: '#ffffff',
                            borderRadius: '16px',
                            maxWidth: '460px',
                            width: '100%',
                            padding: '32px 28px',
                            boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',
                            textAlign: 'center',
                        }}
                    >
                        <div
                            style={{
                                width: '68px',
                                height: '68px',
                                borderRadius: '50%',
                                background: '#ecfdf5',
                                color: '#059669',
                                display: 'flex',
                                alignItems: 'center',
                                justifyContent: 'center',
                                margin: '0 auto 20px',
                                border: '4px solid #d1fae5',
                            }}
                        >
                            <CheckCircle2 size={38} strokeWidth={2.4} />
                        </div>

                        <h2
                            id="success-modal-title"
                            style={{ fontSize: '20px', fontWeight: 700, color: '#111827', margin: '0 0 10px 0' }}
                        >
                            Kiriman Berhasil Diterima!
                        </h2>

                        <p style={{ fontSize: '14px', color: '#4b5563', lineHeight: 1.65, margin: '0 0 24px 0' }}>
                            Terima kasih telah berbagi cerita dan kegiatan inspiratif Anda.
                            Kiriman ini akan ditinjau oleh tim admin Fakultas Teknik UNMA
                            sebelum diterbitkan.
                        </p>

                        <div style={{ display: 'flex', gap: '12px', justifyContent: 'center' }}>
                            <button
                                type="button"
                                style={{ flex: 1, padding: '11px 18px' }}
                                onClick={() => setShowSuccessModal(false)}
                            >
                                Kirim Lagi
                            </button>
                            <Link
                                id="success-modal-news"
                                href="/berita"
                                style={{
                                    flex: 1,
                                    padding: '11px 18px',
                                    background: '#7a1f2a',
                                    color: '#fff',
                                    borderRadius: '8px',
                                    fontWeight: 600,
                                    fontSize: '14px',
                                    display: 'inline-flex',
                                    alignItems: 'center',
                                    justifyContent: 'center',
                                    gap: '6px',
                                    textDecoration: 'none',
                                }}
                            >
                                Lihat Berita
                                <ArrowRight size={15} />
                            </Link>
                        </div>
                    </div>
                </div>
            )}
        </PortalLayout>
    );
}
