import { Head, Link, router } from '@inertiajs/react';
import { BookOpen, CheckCircle, ClipboardList, XCircle, BookMarked, User } from 'lucide-react';
import { Button } from '@/components/ui/button';
import AppLayout from '@/layouts/app-layout';
import type { BreadcrumbItem } from '@/types';

type Course = {
    id: number;
    title: string;
    slug: string;
    level: string;
    price_type: string;
    price: number;
    chapters_count: number;
    lessons_count: number;
    instructor: { id: number; name: string } | null;
    category: { name: string } | null;
    created_at: string;
};

type Props = { courses: Course[] };

const breadcrumbs: BreadcrumbItem[] = [
    { title: 'Admin', href: '/admin' },
    { title: 'Review Kelas', href: '/admin/courses/review' },
];

const LEVEL_COLORS: Record<string, string> = {
    beginner: 'bg-emerald-50 text-emerald-600 border-emerald-100 dark:bg-emerald-950/20 dark:text-emerald-400 dark:border-emerald-900/30',
    intermediate: 'bg-amber-50 text-amber-600 border-amber-100 dark:bg-amber-950/20 dark:text-amber-400 dark:border-amber-900/30',
    advanced: 'bg-rose-50 text-rose-600 border-rose-100 dark:bg-rose-950/20 dark:text-rose-400 dark:border-rose-900/30',
};

const LEVEL_LABELS: Record<string, string> = {
    beginner: 'Pemula',
    intermediate: 'Menengah',
    advanced: 'Lanjutan',
};

export default function AdminCoursesReview({ courses }: Props) {
    function approve(course: Course) {
        if (confirm('Setujui dan publikasikan kelas ini?')) {
            router.patch(`/admin/courses/${course.id}/status`, { status: 'published' });
        }
    }

    function reject(course: Course) {
        if (confirm('Tolak kelas ini? Status akan dikembalikan ke Draft/Ditolak.')) {
            router.patch(`/admin/courses/${course.id}/status`, { status: 'rejected' });
        }
    }

    return (
        <>
            <Head title="Review Kelas" />

            <div className="flex flex-col gap-6 p-4 md:p-6 w-full">
                {/* Header Banner */}
                <div className="relative overflow-hidden rounded-2xl border border-blue-100 bg-gradient-to-br from-blue-50 via-white to-indigo-50 p-6 shadow-xs dark:border-blue-800/30 dark:from-blue-950/40 dark:via-card dark:to-indigo-950/30">
                    <div className="relative z-10 flex items-center justify-between">
                        <div className="flex items-center gap-3">
                            <div className="flex h-11 w-11 items-center justify-center rounded-xl bg-blue-100 dark:bg-blue-800/60">
                                <ClipboardList className="h-5 w-5 text-blue-600 dark:text-blue-300" />
                            </div>
                            <div>
                                <h1 className="text-xl font-bold text-blue-900 dark:text-blue-100">Review Kelas</h1>
                                <p className="text-sm text-blue-600 dark:text-blue-400">
                                    Terdapat <span className="font-semibold">{courses.length}</span> kelas yang memerlukan tinjauan Anda
                                </p>
                            </div>
                        </div>
                        {courses.length > 0 && (
                            <div className="flex h-9 w-9 items-center justify-center rounded-xl bg-amber-100 text-sm font-bold text-amber-700 shadow-xs dark:bg-amber-950/50 dark:text-amber-400">
                                {courses.length}
                            </div>
                        )}
                    </div>
                    <div className="absolute -right-4 -top-4 h-20 w-20 rounded-full bg-blue-100/40 dark:bg-blue-700/10" />
                    <div className="absolute right-10 -bottom-6 h-28 w-28 rounded-full bg-indigo-100/30 dark:bg-indigo-700/10" />
                </div>

                {courses.length === 0 ? (
                    <div className="flex flex-col items-center justify-center rounded-2xl border border-dashed border-zinc-200 bg-white py-16 text-center shadow-sm dark:border-zinc-800 dark:bg-card">
                        <div className="mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-blue-50 dark:bg-blue-900/20">
                            <CheckCircle className="h-7 w-7 text-blue-500 dark:text-blue-400" />
                        </div>
                        <p className="font-bold text-zinc-800 dark:text-zinc-100">Semua sudah bersih!</p>
                        <p className="mt-1 text-xs text-muted-foreground">Tidak ada kelas yang menunggu review saat ini.</p>
                    </div>
                ) : (
                    <div className="flex flex-col gap-5">
                        {courses.map((course) => (
                            <div key={course.id} className="overflow-hidden rounded-2xl bg-white shadow-md transition-shadow hover:shadow-lg dark:bg-card">
                                <div className="p-6">
                                    <div className="flex flex-col md:flex-row md:items-start gap-4">
                                        {/* Icon */}
                                        <div className="flex h-12 w-12 shrink-0 items-center justify-center rounded-xl bg-blue-50 text-blue-600 shadow-xs dark:bg-blue-950/50 dark:text-blue-400">
                                            <BookMarked className="h-6 w-6" />
                                        </div>

                                        {/* Info */}
                                        <div className="flex-1 min-w-0">
                                            <div className="flex items-center gap-2 flex-wrap mb-2">
                                                <h3 className="font-bold text-lg leading-tight text-zinc-800 dark:text-zinc-100">{course.title}</h3>
                                                <span className="rounded-full bg-amber-50 border border-amber-100 px-2.5 py-0.5 text-[11px] font-semibold text-amber-600 dark:bg-amber-950/20 dark:border-amber-900/30 dark:text-amber-400">
                                                    Menunggu Review
                                                </span>
                                            </div>

                                            <div className="flex flex-wrap gap-1.5 mb-4">
                                                {course.category && (
                                                    <span className="rounded-full bg-blue-50 border border-blue-100 px-2.5 py-0.5 text-[11px] font-semibold text-blue-600 dark:bg-blue-950/20 dark:border-blue-900/30 dark:text-blue-400">
                                                        {course.category.name}
                                                    </span>
                                                )}
                                                <span className={`rounded-full border px-2.5 py-0.5 text-[11px] font-semibold ${LEVEL_COLORS[course.level] ?? 'bg-zinc-50 border-zinc-100 text-zinc-600'}`}>
                                                    {LEVEL_LABELS[course.level] ?? course.level}
                                                </span>
                                                <span className={`rounded-full border px-2.5 py-0.5 text-[11px] font-semibold ${
                                                    course.price_type === 'free'
                                                        ? 'bg-emerald-50 border-emerald-100 text-emerald-600 dark:bg-emerald-950/20 dark:border-emerald-900/30 dark:text-emerald-400'
                                                        : 'bg-blue-50 border-blue-100 text-blue-600 dark:bg-blue-950/20 dark:border-blue-900/30 dark:text-blue-400'
                                                }`}>
                                                    {course.price_type === 'free' ? '✦ Gratis' : `Rp ${course.price.toLocaleString('id-ID')}`}
                                                </span>
                                            </div>

                                            <div className="grid grid-cols-1 gap-y-2 text-xs sm:grid-cols-3 sm:gap-x-6 text-muted-foreground border-t border-zinc-50 pt-3 dark:border-zinc-800/50">
                                                <div className="flex items-center gap-1.5">
                                                    <User className="h-3.5 w-3.5 shrink-0 text-zinc-400" />
                                                    <span className="font-medium text-zinc-600 dark:text-zinc-400">Instruktur: <span className="text-zinc-800 dark:text-zinc-200 font-semibold">{course.instructor?.name ?? '-'}</span></span>
                                                </div>
                                                <div className="flex items-center gap-1.5">
                                                    <BookOpen className="h-3.5 w-3.5 shrink-0 text-zinc-400" />
                                                    <span className="font-medium text-zinc-600 dark:text-zinc-400">Kurikulum: <span className="text-zinc-800 dark:text-zinc-200 font-semibold">{course.chapters_count} bab · {course.lessons_count} materi</span></span>
                                                </div>
                                                <div className="flex items-center gap-1.5">
                                                    <span className="font-medium text-zinc-600 dark:text-zinc-400">Diajukan: <span className="text-zinc-800 dark:text-zinc-200 font-semibold">{new Date(course.created_at).toLocaleDateString('id-ID', { day: 'numeric', month: 'short', year: 'numeric' })}</span></span>
                                                </div>
                                            </div>
                                        </div>
                                    </div>

                                    {/* Actions */}
                                    <div className="mt-5 flex flex-col sm:flex-row sm:items-center gap-3 border-t border-zinc-100 pt-4 dark:border-zinc-800">
                                        <Link
                                            href={`/instructor/courses/${course.slug}`}
                                            className="inline-flex items-center justify-center gap-1.5 rounded-xl bg-blue-50 border border-blue-100 px-4 py-2 text-xs font-bold text-blue-600 hover:bg-blue-100 hover:text-blue-700 transition-all dark:bg-blue-950/20 dark:border-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 cursor-pointer"
                                        >
                                            <BookOpen className="h-3.5 w-3.5" />
                                            Lihat & Review Kurikulum
                                        </Link>
                                        <div className="sm:ml-auto flex gap-2">
                                            <button
                                                onClick={() => reject(course)}
                                                className="inline-flex items-center justify-center gap-1.5 h-8 rounded-xl px-4 text-xs font-bold bg-rose-50 border border-rose-100 text-rose-600 hover:bg-rose-100 hover:text-rose-700 cursor-pointer transition-all dark:bg-rose-950/20 dark:border-rose-900/30 dark:text-rose-400 dark:hover:bg-rose-950/30 shadow-xs"
                                            >
                                                <XCircle className="h-3.5 w-3.5" />
                                                Tolak
                                            </button>
                                            <button
                                                onClick={() => approve(course)}
                                                className="inline-flex items-center justify-center gap-1.5 h-8 rounded-xl px-4 text-xs font-bold bg-emerald-50 border border-emerald-100 text-emerald-600 hover:bg-emerald-100 hover:text-emerald-700 cursor-pointer transition-all dark:bg-emerald-950/20 dark:border-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-950/30 shadow-xs"
                                            >
                                                <CheckCircle className="h-3.5 w-3.5" />
                                                Setujui & Publikasikan
                                            </button>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        ))}
                    </div>
                )}
            </div>
        </>
    );
}

AdminCoursesReview.layout = (page: React.ReactNode) => <AppLayout breadcrumbs={breadcrumbs}>{page}</AppLayout>;
