import { Head, Link } from '@inertiajs/react';
import { BookOpen, BookmarkX, PlayCircle, FileText, Bookmark, ChevronRight, GraduationCap } from 'lucide-react';
import AppLayout from '@/layouts/app-layout';
import type { BreadcrumbItem } from '@/types';

type LessonBookmark = {
    id: number;
    lesson: {
        id: number;
        title: string;
        type: string;
        chapter: {
            title: string;
            course: { id: number; title: string; slug: string };
        };
    };
};

type CourseBookmark = {
    id: number;
    course: {
        id: number;
        title: string;
        slug: string;
        thumbnail: string | null;
        level: string;
        price_type: 'free' | 'paid';
        price: number | null;
    };
};

type Props = {
    lessonBookmarks: LessonBookmark[];
    courseBookmarks: CourseBookmark[];
};

const breadcrumbs: BreadcrumbItem[] = [{ title: 'Bookmark', href: '/bookmarks' }];

const LESSON_TYPE_ICON: Record<string, React.ElementType> = {
    video: PlayCircle,
    article: BookOpen,
    pdf: FileText,
    file: FileText,
};

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

export default function BookmarksIndex({ lessonBookmarks, courseBookmarks }: Props) {
    const isEmpty = lessonBookmarks.length === 0 && courseBookmarks.length === 0;

    return (
        <>
            <Head title="Bookmark Saya" />

            <div className="mx-auto max-w-6xl flex flex-col gap-6 px-5 py-8">
                
                {/* Premium Pastel Blue Header Card */}
                <div className="relative overflow-hidden rounded-3xl border border-blue-100 bg-gradient-to-br from-blue-50/60 via-white to-indigo-50/40 p-6 shadow-xs dark:border-blue-950/30 dark:from-blue-950/20 dark:to-indigo-950/15">
                    {/* Glowing design elements */}
                    <div className="absolute -right-10 -top-10 h-36 w-36 rounded-full bg-blue-400/10 blur-2xl" />
                    <div className="absolute -left-10 -bottom-10 h-36 w-36 rounded-full bg-indigo-400/10 blur-2xl" />

                    <div className="relative z-10 flex items-center gap-4">
                        <div className="flex h-12 w-12 items-center justify-center rounded-2xl bg-blue-100 text-blue-600 border border-blue-200/50 shadow-xs dark:bg-blue-950/50 dark:text-blue-400 dark:border-blue-900/30">
                            <Bookmark className="h-6 w-6" />
                        </div>
                        <div>
                            <h1 className="text-2xl font-black text-slate-800 dark:text-slate-100 leading-tight">
                                Bookmark Saya
                            </h1>
                            <p className="mt-1 text-sm text-slate-600 dark:text-slate-400 font-medium">
                                Menyimpan <span className="text-blue-600 dark:text-blue-400 font-bold">{courseBookmarks.length} kelas</span> dan <span className="text-indigo-600 dark:text-indigo-400 font-bold">{lessonBookmarks.length} materi</span> pilihanmu
                            </p>
                        </div>
                    </div>
                </div>

                {isEmpty ? (
                    <div className="flex flex-col items-center justify-center rounded-3xl border border-dashed border-blue-200 py-16 text-center dark:border-blue-900/40 bg-white/40">
                        <div className="mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-blue-50 dark:bg-blue-950/30 animate-pulse">
                            <BookmarkX className="h-7 w-7 text-blue-400" />
                        </div>
                        <p className="font-bold text-slate-800 dark:text-slate-200">Belum ada bookmark</p>
                        <p className="mt-1 text-xs text-slate-500 dark:text-slate-400 max-w-xs leading-relaxed">
                            Klik ikon bookmark di halaman materi atau kelas untuk menyimpannya di sini agar mudah diakses kembali.
                        </p>
                    </div>
                ) : (
                    <div className="grid gap-8 lg:grid-cols-2">
                        
                        {/* ── COURSE BOOKMARKS ────────────────────────────────── */}
                        {courseBookmarks.length > 0 && (
                            <div>
                                <div className="flex items-center gap-2 mb-4">
                                    <span className="flex h-1.5 w-1.5 rounded-full bg-blue-500" />
                                    <h2 className="font-bold text-slate-800 dark:text-slate-200 text-base">Kelas Tersimpan</h2>
                                </div>
                                <div className="flex flex-col gap-3.5">
                                    {courseBookmarks.map((b) => (
                                        <Link
                                            key={b.id}
                                            href={`/courses/${b.course.slug}`}
                                            className="group flex gap-4 rounded-2xl border border-blue-100/70 bg-white p-3.5 shadow-3xs hover:shadow-md hover:-translate-y-0.5 hover:border-blue-200 dark:border-blue-950/30 dark:bg-card transition-all duration-300"
                                        >
                                            <div className="h-16 w-24 shrink-0 overflow-hidden rounded-xl bg-blue-50/50 border border-blue-100/50 dark:bg-zinc-900/30 dark:border-zinc-800">
                                                {b.course.thumbnail ? (
                                                    <img src={b.course.thumbnail} alt={b.course.title} className="h-full w-full object-cover group-hover:scale-[1.03] transition-transform duration-300" />
                                                ) : (
                                                    <div className="flex h-full items-center justify-center">
                                                        <GraduationCap className="h-6 w-6 text-blue-400/80" />
                                                    </div>
                                                )}
                                            </div>
                                            
                                            <div className="flex-1 min-w-0 flex flex-col justify-between">
                                                <div>
                                                    <p className="font-bold text-slate-800 dark:text-slate-100 text-sm sm:text-base leading-snug group-hover:text-blue-600 transition-colors line-clamp-1">
                                                        {b.course.title}
                                                    </p>
                                                    <div className="mt-2 flex items-center gap-2 flex-wrap">
                                                        <span className="rounded-full bg-blue-50 dark:bg-blue-950/40 px-2 py-0.5 text-[10px] font-semibold text-blue-700 dark:text-blue-400">
                                                            {LEVEL_LABELS[b.course.level] ?? b.course.level}
                                                        </span>
                                                        <span className="text-[10px] text-slate-400 dark:text-slate-500">•</span>
                                                        <span className={`text-[10px] font-bold ${b.course.price_type === 'free' ? 'text-emerald-600 dark:text-emerald-400' : 'text-blue-600 dark:text-blue-400'}`}>
                                                            {b.course.price_type === 'free' ? '✦ Gratis' : (b.course.price ? `Rp ${b.course.price.toLocaleString('id-ID')}` : 'Berbayar')}
                                                        </span>
                                                    </div>
                                                </div>
                                            </div>
                                            <ChevronRight className="h-5 w-5 shrink-0 text-slate-400 group-hover:text-blue-500 transition-colors self-center" />
                                        </Link>
                                    ))}
                                </div>
                            </div>
                        )}

                        {/* ── LESSON BOOKMARKS ────────────────────────────────── */}
                        {lessonBookmarks.length > 0 && (
                            <div>
                                <div className="flex items-center gap-2 mb-4">
                                    <span className="flex h-1.5 w-1.5 rounded-full bg-indigo-500" />
                                    <h2 className="font-bold text-slate-800 dark:text-slate-200 text-base">Materi Tersimpan</h2>
                                </div>
                                <div className="flex flex-col gap-3.5">
                                    {lessonBookmarks.map((b) => {
                                        const Icon = LESSON_TYPE_ICON[b.lesson.type] ?? BookOpen;
                                        return (
                                            <Link
                                                key={b.id}
                                                href={`/courses/${b.lesson.chapter.course.slug}/learn/${b.lesson.id}`}
                                                className="group flex items-center gap-4 rounded-2xl border border-blue-100/70 bg-white p-3.5 shadow-3xs hover:shadow-md hover:-translate-y-0.5 hover:border-blue-200 dark:border-blue-950/30 dark:bg-card transition-all duration-300"
                                            >
                                                <div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-indigo-50 text-indigo-600 border border-indigo-100/50 dark:bg-indigo-950/20 dark:text-indigo-400 dark:border-indigo-900/30">
                                                    <Icon className="h-5 w-5 shrink-0" />
                                                </div>
                                                
                                                <div className="min-w-0 flex-1">
                                                    <p className="truncate text-sm sm:text-base font-bold text-slate-800 dark:text-slate-100 group-hover:text-indigo-600 transition-colors leading-snug">
                                                        {b.lesson.title}
                                                    </p>
                                                    <div className="mt-1.5 flex items-center gap-2 text-[10px] text-slate-500 dark:text-slate-400 font-medium truncate">
                                                        <span className="truncate max-w-[120px] sm:max-w-[180px] bg-indigo-50/50 dark:bg-indigo-950/10 px-1.5 py-0.5 rounded-md border border-indigo-100/30">
                                                            {b.lesson.chapter.course.title}
                                                        </span>
                                                        <span>•</span>
                                                        <span className="truncate">
                                                            {b.lesson.chapter.title}
                                                        </span>
                                                    </div>
                                                </div>
                                                <ChevronRight className="h-5 w-5 shrink-0 text-slate-400 group-hover:text-indigo-500 transition-colors self-center" />
                                            </Link>
                                        );
                                    })}
                                </div>
                            </div>
                        )}
                    </div>
                )}
            </div>
        </>
    );
}

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