import { Link, Head, router, usePage } from '@inertiajs/react';
import { Plus, Edit, Trash2, Eye, BookOpen, Calendar, AlertCircle } from 'lucide-react';
import AuthenticatedLayout from '@/layouts/AuthenticatedLayout';
import LearningContentFilters from '@/components/LearningContentFilters';
import { formatDate } from '@/lib/utils';
import type { PageProps, AcademicYearWithSemesters } from '@/types';
import { useState } from 'react';
import ConfirmDeleteModal from '@/components/ConfirmDeleteModal';
import WhatsAppShareButton from '@/components/WhatsAppShareButton';

interface Material {
    id: number;
    title: string;
    status: 'draft' | 'published';
    published_at: string | null;
    created_at: string;
    assignments_count: number;
    synced_class: { id: number; name: string } | null;
    classes?: Array<{ id: number; name: string }>;
    subject: { id: number; name: string } | null;
    semester: { id: number; type: string } | null;
}

interface Props extends PageProps {
    materials: {
        data: Material[];
        links: Array<{ url: string | null; label: string; active: boolean }>;
        current_page: number;
        last_page: number;
        total: number;
    };
    periods?: AcademicYearWithSemesters[];
    selectedPeriod?: number | null;
    selectedSemester?: number | null;
    subjects: Array<{ id: number; name: string }>;
    selectedSubject?: number | null;
}

export default function MateriIndex({ materials, periods, selectedPeriod, selectedSemester, subjects, selectedSubject }: Props) {
    const [deleteConfig, setDeleteConfig] = useState<{isOpen: boolean, url: string} | null>(null);
    const subjectName = subjects.find((subject) => subject.id === selectedSubject)?.name;
    const emptyMessage = selectedSubject ? 'Tidak ada materi untuk mata pelajaran ini pada periode yang dipilih.' : 'Belum ada materi pelajaran';

    function handleDelete(id: number) {
        setDeleteConfig({
            isOpen: true,
            url: `/materials/${id}`
        });
    }

    function renderClassNames(material: Material) {
        if (material.classes && material.classes.length > 0) {
            return material.classes.map((c) => c.name).join(', ');
        }
        return material.synced_class ? material.synced_class.name : '-';
    }

    return (
        <>
            <Head title="Materi Pelajaran" />

            <div className="space-y-6">
                {/* Header */}
                <div className="flex items-center justify-between">
                    <div>
                        <p className="text-sm text-text-muted">
                            {subjectName ? `Total: ${materials.total} materi · ${subjectName}` : `Total materi dibuat: ${materials.total} materi`}
                        </p>
                    </div>
                    <Link
                        href="/materials/create"
                        className="inline-flex items-center justify-center gap-2 rounded-xl bg-primary-500 px-4 py-2.5 text-sm font-semibold text-white hover:bg-primary-400 transition-all glow-primary"
                    >
                        <Plus className="h-4.5 w-4.5" />
                        Buat Materi
                    </Link>
                </div>

                <LearningContentFilters
                    selectedPeriod={selectedPeriod}
                    selectedSemester={selectedSemester}
                    baseUrl="/materials"
                    filterBySemester
                    subjects={subjects}
                    selectedSubject={selectedSubject}
                />

                {/* Desktop Table */}
                <div className="hidden md:block glass overflow-hidden rounded-2xl">
                    <div className="overflow-x-auto">
                        <table className="w-full border-collapse text-left text-sm text-text">
                            <thead>
                                <tr className="border-b border-border bg-surface/50 text-xs font-semibold uppercase tracking-wider text-text-muted">
                                    <th className="px-6 py-4">Judul Materi</th>
                                    <th className="px-6 py-4">Mata Pelajaran</th>
                                    <th className="px-6 py-4">Kelas</th>
                                    <th className="px-6 py-4">Tugas</th>
                                    <th className="px-6 py-4">Status</th>
                                    <th className="px-6 py-4">Dibuat Pada</th>
                                    <th className="px-6 py-4 text-right">Aksi</th>
                                </tr>
                            </thead>
                            <tbody className="divide-y divide-border/40">
                                {materials.data.length > 0 ? (
                                    materials.data.map((material) => (
                                        <tr key={material.id} className="hover:bg-surface-hover/30 transition-colors">
                                            <td className="px-6 py-4">
                                                <div className="flex items-center gap-3">
                                                    <div className="flex h-9 w-9 items-center justify-center rounded-full bg-primary-500/10 text-primary-400">
                                                        <BookOpen className="h-4.5 w-4.5" />
                                                    </div>
                                                    <Link 
                                                        href={`/materials/${material.id}`}
                                                        className="font-semibold text-text-light hover:text-primary-300 hover:underline"
                                                    >
                                                        {material.title}
                                                    </Link>
                                                </div>
                                            </td>
                                            <td className="px-6 py-4">
                                                {material.subject?.name ?? '-'}
                                            </td>
                                            <td className="px-6 py-4">
                                                {renderClassNames(material) !== '-' ? (
                                                    <span className="inline-flex items-center rounded-md bg-emerald-500/10 px-2.5 py-0.5 text-xs font-medium text-emerald-400 ring-1 ring-inset ring-emerald-500/20">
                                                        Kelas {renderClassNames(material)}
                                                    </span>
                                                ) : (
                                                    '-'
                                                )}
                                            </td>
                                            <td className="px-6 py-4">
                                                <Link
                                                    href={`/materials/${material.id}`}
                                                    className="inline-flex items-center gap-1 font-semibold text-primary-400 hover:text-primary-300 hover:underline"
                                                    title="Buka detail & kelola penugasan"
                                                >
                                                    {material.assignments_count} Tugas
                                                </Link>
                                            </td>
                                            <td className="px-6 py-4">
                                                {material.status === 'published' ? (
                                                    <span className="inline-flex items-center rounded-md bg-teal-500/10 px-2.5 py-0.5 text-xs font-medium text-teal-400 ring-1 ring-inset ring-teal-500/20">
                                                        Dipublikasikan
                                                    </span>
                                                ) : (
                                                    <span className="inline-flex items-center rounded-md bg-amber-500/10 px-2.5 py-0.5 text-xs font-medium text-amber-400 ring-1 ring-inset ring-amber-500/20">
                                                        Draft
                                                    </span>
                                                )}
                                            </td>
                                            <td className="px-6 py-4">
                                                <div className="flex items-center gap-1.5 text-xs text-text-muted">
                                                    <Calendar className="h-3.5 w-3.5" />
                                                    <span>{formatDate(material.created_at)}</span>
                                                </div>
                                            </td>
                                            <td className="px-6 py-4 text-right">
                                                <div className="flex items-center justify-end gap-2">
                                                    {material.status === 'published' && (
                                                        <WhatsAppShareButton path={`/materials/${material.id}`} title={material.title} kind="materi" iconOnly />
                                                    )}
                                                    <Link
                                                        href={`/materials/${material.id}`}
                                                        className="rounded-lg border border-primary-500/30 bg-primary-500/15 p-1.5 text-primary-400 shadow-sm transition-all duration-200 hover:border-primary-500 hover:bg-primary-500 hover:text-white"
                                                        title="Detail & Tugas"
                                                    >
                                                        <Eye className="h-4.5 w-4.5" />
                                                    </Link>
                                                    <Link
                                                        href={`/materials/${material.id}/edit`}
                                                        className="rounded-lg p-1.5 text-text-muted hover:bg-surface-hover hover:text-primary-300 transition-colors"
                                                        title="Edit Materi"
                                                    >
                                                        <Edit className="h-4.5 w-4.5" />
                                                    </Link>
                                                    <button
                                                        onClick={() => handleDelete(material.id)}
                                                        className="rounded-lg p-1.5 text-text-muted hover:bg-surface-hover hover:text-rose-400 transition-colors"
                                                        title="Hapus"
                                                    >
                                                        <Trash2 className="h-4.5 w-4.5" />
                                                    </button>
                                                </div>
                                            </td>
                                        </tr>
                                    ))
                                ) : (
                                    <tr>
                                        <td colSpan={7} className="px-6 py-12 text-center text-text-muted">
                                            <div className="flex flex-col items-center">
                                                <AlertCircle className="h-10 w-10 opacity-30 mb-3" />
                                                <p className="font-medium text-base">{emptyMessage}</p>
                                                {!selectedSubject && <p className="text-xs mt-1">Buat materi pelajaran pertama Anda dengan menekan tombol Buat Materi di atas.</p>}
                                            </div>
                                        </td>
                                    </tr>
                                )}
                            </tbody>
                        </table>
                    </div>
                </div>

                {/* Mobile Cards */}
                <div className="grid grid-cols-1 gap-4 md:hidden">
                    {materials.data.length > 0 ? (
                        materials.data.map((material) => (
                            <div key={material.id} className="glass p-4 rounded-xl flex flex-col gap-3 text-[10px]">
                                <div className="flex items-start justify-between gap-2">
                                    <div className="flex items-center gap-2">
                                        <div className="flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-primary-500/10 text-primary-400">
                                            <BookOpen className="h-3.5 w-3.5" />
                                        </div>
                                        <Link 
                                            href={`/materials/${material.id}`}
                                            className="font-semibold text-text-light text-xs hover:text-primary-300 hover:underline line-clamp-2"
                                        >
                                            {material.title}
                                        </Link>
                                    </div>
                                    <div className="shrink-0 flex items-center gap-1.5">
                                         <Link
                                             href={`/materials/${material.id}`}
                                             className="rounded-lg border border-primary-500/30 bg-primary-500/15 p-1.5 text-primary-400 shadow-sm transition-all duration-200 hover:border-primary-500 hover:bg-primary-500 hover:text-white"
                                             title="Detail & Tugas"
                                         >
                                             <Eye className="h-4 w-4" />
                                         </Link>
                                        <Link
                                            href={`/materials/${material.id}/edit`}
                                            className="rounded-lg p-1.5 text-text-muted hover:bg-surface-hover hover:text-primary-300 transition-colors"
                                        >
                                            <Edit className="h-4 w-4" />
                                        </Link>
                                        <button
                                            onClick={() => handleDelete(material.id)}
                                            className="rounded-lg p-1.5 text-text-muted hover:bg-surface-hover hover:text-rose-400 transition-colors"
                                        >
                                            <Trash2 className="h-4 w-4" />
                                        </button>
                                    </div>
                                </div>
                                <div className="grid grid-cols-2 gap-2 text-text-muted">
                                    <div>
                                        <span className="block opacity-70">Mata Pelajaran</span>
                                        <span className="font-medium text-text">{material.subject?.name ?? '-'}</span>
                                    </div>
                                    <div>
                                        <span className="block opacity-70">Kelas</span>
                                        {renderClassNames(material) !== '-' ? (
                                            <span className="font-medium text-emerald-400">
                                                {renderClassNames(material)}
                                            </span>
                                        ) : (
                                            <span className="font-medium text-text">-</span>
                                        )}
                                    </div>
                                    <div>
                                        <span className="block opacity-70">Status</span>
                                        {material.status === 'published' ? (
                                            <span className="font-medium text-teal-400">
                                                Dipublikasikan
                                            </span>
                                        ) : (
                                            <span className="font-medium text-amber-400">
                                                Draft
                                            </span>
                                        )}
                                    </div>
                                    <div>
                                        <span className="block opacity-70">Tugas / Dibuat</span>
                                        <div className="font-medium text-text flex items-center gap-1">
                                            <Link href={`/materials/${material.id}`} className="text-primary-300 font-semibold hover:underline">
                                                {material.assignments_count} Tugas
                                            </Link>
                                            <span>• {formatDate(material.created_at)}</span>
                                        </div>
                                    </div>
                                </div>
                                {material.status === 'published' && (
                                    <div className="flex justify-end border-t border-border/40 pt-3">
                                        <WhatsAppShareButton path={`/materials/${material.id}`} title={material.title} kind="materi" />
                                    </div>
                                )}
                            </div>
                        ))
                    ) : (
                        <div className="glass rounded-xl p-8 text-center text-text-muted">
                            <div className="flex flex-col items-center">
                                <AlertCircle className="h-8 w-8 opacity-30 mb-2" />
                                <p className="font-medium text-sm">{emptyMessage}</p>
                            </div>
                        </div>
                    )}
                </div>

                {/* Pagination */}
                {materials.last_page > 1 && (
                    <div className="flex justify-center gap-2">
                        {materials.links.map((link, i) => (
                            <Link
                                key={i}
                                href={link.url || '#'}
                                className={`px-4 py-2 rounded-xl text-sm transition-colors ${
                                    link.active
                                        ? 'bg-primary-500 text-white font-bold'
                                        : 'bg-surface hover:bg-surface-hover text-text'
                                } ${!link.url ? 'opacity-50 cursor-not-allowed' : ''}`}
                                dangerouslySetInnerHTML={{ __html: link.label }}
                            />
                        ))}
                    </div>
                )}
            </div>

            {deleteConfig && (
                <ConfirmDeleteModal
                    isOpen={deleteConfig.isOpen}
                    onClose={() => setDeleteConfig(null)}
                    onConfirm={() => router.delete(deleteConfig.url)}
                    title="Hapus Materi"
                    message="Apakah Anda yakin ingin menghapus materi ini? Semua tautan media dan tugas terkait akan ikut terhapus."
                />
            )}
        </>
    );
}

MateriIndex.layout = (page: any) => <AuthenticatedLayout title="Materi Pelajaran">{page}</AuthenticatedLayout>;
