import { Head, Link, router, usePage } from '@inertiajs/react';
import {
    Award,
    BookOpen,
    ChevronLeft,
    ChevronRight,
    Clock,
    Search,
    SlidersHorizontal,
    Star,
    Users,
} from 'lucide-react';
import { useRef, useState } from 'react';
import GuestLayout from '@/layouts/guest-layout';
import AppLayout from '@/layouts/app-layout';
import type { Auth } from '@/types';

type Category = { id: number; name: string; slug: string };

type Course = {
    id: number;
    title: string;
    slug: string;
    description: string | null;
    thumbnail: string | null;
    level: string;
    price_type: 'free' | 'paid';
    price: number;
    duration_minutes: number;
    enrollments_count: number;
    lessons_count: number;
    instructor: { id: number; name: string };
    category: { id: number; name: string; slug: string } | null;
};

type PaginatedCourses = {
    data: Course[];
    current_page: number;
    last_page: number;
    total: number;
    links: { url: string | null; label: string; active: boolean }[];
};

type Props = {
    courses: PaginatedCourses;
    categories: Category[];
    enrolledCourseIds: number[];
    filters: { search?: string; category?: string; level?: string; price?: string };
};

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

const levelColors: Record<string, { bg: string; color: string }> = {
    beginner:     { bg: 'rgba(6,214,160,0.12)',   color: '#05A57D' },
    intermediate: { bg: 'rgba(255,183,3,0.12)',   color: '#B8820A' },
    advanced:     { bg: 'rgba(230,57,70,0.12)',   color: '#C0303B' },
};

function formatDuration(minutes: number): string {
    if (minutes < 60) return `${minutes} mnt`;
    const h = Math.floor(minutes / 60);
    const m = minutes % 60;
    return m > 0 ? `${h}j ${m}mnt` : `${h} jam`;
}

function formatPrice(price: number): string {
    return new Intl.NumberFormat('id-ID', {
        style: 'currency',
        currency: 'IDR',
        maximumFractionDigits: 0,
    }).format(price);
}

export default function CoursesIndex({ courses, categories, enrolledCourseIds, filters }: Props) {
    const [search, setSearch] = useState(filters.search ?? '');
    const contentRef = useRef<HTMLDivElement>(null);

    function applyFilter(params: Record<string, string>) {
        router.get('/courses', { ...filters, ...params }, { preserveScroll: true, preserveState: true, replace: true });
    }

    function handleSearch(e: React.FormEvent) {
        e.preventDefault();
        applyFilter({ search });
    }

    const activeFiltersCount = [filters.category, filters.level, filters.price].filter(Boolean).length;

    return (
        <>
            <Head title="Jelajahi Kelas – Pakandi" />

            {/* ─── HERO ──────────────────────────────────────────────────── */}
            <section
                className="relative overflow-hidden"
                style={{ backgroundColor: '#0D0F12', paddingTop: '72px', paddingBottom: '72px' }}
            >
                {/* 4 parallelogram photo panels — same as landing page */}
                <div className="absolute inset-0 z-0">
                    {[
                        'https://picsum.photos/seed/courses-h1/700/600',
                        'https://picsum.photos/seed/courses-h2/700/600',
                        'https://picsum.photos/seed/courses-h3/700/600',
                        'https://picsum.photos/seed/courses-h4/700/600',
                    ].map((src, i) => (
                        <div
                            key={i}
                            className="absolute inset-y-0 overflow-hidden"
                            style={{
                                left: `${i * 25}%`,
                                width: '36%',
                                clipPath: 'polygon(13% 0%, 100% 0%, 87% 100%, 0% 100%)',
                            }}
                        >
                            <img
                                src={src}
                                alt=""
                                aria-hidden="true"
                                className="h-full w-full object-cover"
                                loading={i === 0 ? 'eager' : 'lazy'}
                            />
                            <div className="absolute inset-0" style={{ backgroundColor: 'rgba(0,0,0,0.42)' }} />
                        </div>
                    ))}
                    {/* Gradient overlay — heavy on center for text legibility */}
                    <div
                        className="absolute inset-0"
                        style={{
                            background:
                                'linear-gradient(to bottom, rgba(13,15,18,0.55) 0%, rgba(13,15,18,0.72) 100%), ' +
                                'radial-gradient(ellipse 80% 100% at 50% 50%, rgba(13,15,18,0.3) 0%, rgba(13,15,18,0.85) 100%)',
                        }}
                    />
                </div>

                <div className="relative z-10 mx-auto max-w-7xl px-5 md:px-8">
                    {/* Breadcrumb */}
                    <div className="mb-6 flex items-center gap-2 text-sm" style={{ color: 'rgba(255,255,255,0.48)' }}>
                        <Link href="/" className="transition-colors hover:text-white">Beranda</Link>
                        <ChevronRight className="h-3.5 w-3.5" />
                        <span style={{ color: 'rgba(255,255,255,0.8)' }}>Kelas</span>
                    </div>

                    {/* Title */}
                    <div className="mx-auto max-w-2xl text-center">
                        <div
                            className="mb-4 inline-flex items-center gap-2 rounded-full px-4 py-1.5 text-sm font-medium"
                            style={{
                                backgroundColor: 'rgba(255,255,255,0.08)',
                                border: '1px solid rgba(255,255,255,0.15)',
                                color: 'rgba(255,255,255,0.82)',
                            }}
                        >
                            <Star className="h-3.5 w-3.5 fill-[#FFB703] text-[#FFB703]" />
                            {courses.total}+ kelas tersedia
                        </div>

                        <h1
                            className="mb-4 text-3xl font-bold leading-tight tracking-tight md:text-4xl lg:text-5xl"
                            style={{ color: '#FFFFFF' }}
                        >
                            Jelajahi Kelas yang
                            <br />
                            <span style={{ color: '#FFB703' }}>Tepat Untukmu</span>
                        </h1>

                        <p className="mb-8 text-base leading-relaxed md:text-lg" style={{ color: 'rgba(255,255,255,0.62)' }}>
                            Ratusan kelas dari mentor berpengalaman — pilih sesuai level, kategori, dan waktu belajarmu.
                        </p>

                        {/* Search bar */}
                        <form onSubmit={handleSearch} className="mx-auto max-w-lg">
                            <div
                                className="flex items-center gap-3 rounded-2xl p-2"
                                style={{
                                    backgroundColor: 'rgba(255,255,255,0.97)',
                                    boxShadow: '0 8px 40px rgba(0,0,0,0.28)',
                                }}
                            >
                                <Search className="ml-3 h-5 w-5 shrink-0" style={{ color: '#118AB2' }} />
                                <input
                                    type="text"
                                    value={search}
                                    onChange={(e) => setSearch(e.target.value)}
                                    placeholder="Cari kelas, topik, atau mentor..."
                                    className="flex-1 bg-transparent text-sm outline-none"
                                    style={{ color: '#1A1A1A' }}
                                />
                                <button
                                    type="submit"
                                    className="shrink-0 rounded-xl px-5 py-2.5 text-sm font-semibold text-white transition-all hover:-translate-y-0.5 active:translate-y-0"
                                    style={{
                                        backgroundColor: '#118AB2',
                                        boxShadow: '0 4px 16px rgba(17,138,178,0.35)',
                                    }}
                                >
                                    Cari
                                </button>
                            </div>
                        </form>

                        {/* Quick stats */}
                        <div className="mt-8 flex flex-wrap items-center justify-center gap-6 text-sm" style={{ color: 'rgba(255,255,255,0.55)' }}>
                            {[
                                { icon: BookOpen, text: `${courses.total}+ Kelas` },
                                { icon: Users,    text: '5.000+ Pelajar' },
                                { icon: Award,    text: 'Sertifikat Resmi' },
                            ].map(({ icon: Icon, text }) => (
                                <span key={text} className="flex items-center gap-1.5">
                                    <Icon className="h-4 w-4" style={{ color: '#06D6A0' }} />
                                    {text}
                                </span>
                            ))}
                        </div>
                    </div>
                </div>
            </section>

            {/* ─── CONTENT ───────────────────────────────────────────────── */}
            <div ref={contentRef} className="mx-auto max-w-7xl px-5 py-10 md:px-8">

                {/* Filter bar */}
                <div className="mb-8 flex flex-col gap-4 rounded-2xl bg-white p-4 border border-slate-100 shadow-sm md:flex-row md:items-center md:justify-between">
                    {/* Categories */}
                    <div className="flex flex-wrap items-center gap-1.5">
                        <span className="text-xs font-bold uppercase tracking-wider text-slate-400 mr-2">Kategori:</span>
                        <button
                            onClick={() => applyFilter({ category: '' })}
                            className="rounded-full px-3.5 py-1.5 text-xs font-semibold transition-all"
                            style={
                                !filters.category
                                    ? { backgroundColor: '#118AB2', color: '#FFFFFF', boxShadow: '0 2px 8px rgba(17,138,178,0.2)' }
                                    : { backgroundColor: '#F3F4F6', color: '#4B5563', border: '1px solid transparent' }
                            }
                        >
                            Semua
                        </button>
                        {categories.map((cat) => (
                            <button
                                key={cat.id}
                                onClick={() => applyFilter({ category: cat.slug })}
                                className="rounded-full px-3.5 py-1.5 text-xs font-semibold transition-all"
                                style={
                                    filters.category === cat.slug
                                        ? { backgroundColor: '#118AB2', color: '#FFFFFF', boxShadow: '0 2px 8px rgba(17,138,178,0.2)' }
                                        : { backgroundColor: '#F3F4F6', color: '#4B5563', border: '1px solid transparent' }
                                }
                            >
                                {cat.name}
                            </button>
                        ))}
                    </div>

                    {/* Dropdowns */}
                    <div className="flex flex-wrap items-center gap-2 md:justify-end">
                        <span className="text-xs font-bold uppercase tracking-wider text-slate-400 mr-1">Filter:</span>
                        <select
                            value={filters.level ?? ''}
                            onChange={(e) => applyFilter({ level: e.target.value })}
                            className="cursor-pointer rounded-full border border-gray-200 bg-white px-3.5 py-1.5 text-xs font-semibold text-gray-700 shadow-sm outline-none transition-all hover:bg-gray-50 focus:border-[#118AB2] focus:ring-1 focus:ring-[#118AB2]"
                        >
                            <option value="">Semua Level</option>
                            <option value="beginner">Pemula</option>
                            <option value="intermediate">Menengah</option>
                            <option value="advanced">Mahir</option>
                        </select>
                        <select
                            value={filters.price ?? ''}
                            onChange={(e) => applyFilter({ price: e.target.value })}
                            className="cursor-pointer rounded-full border border-gray-200 bg-white px-3.5 py-1.5 text-xs font-semibold text-gray-700 shadow-sm outline-none transition-all hover:bg-gray-50 focus:border-[#118AB2] focus:ring-1 focus:ring-[#118AB2]"
                        >
                            <option value="">Semua Harga</option>
                            <option value="free">Gratis</option>
                            <option value="paid">Berbayar</option>
                        </select>
                        
                        {activeFiltersCount > 0 && (
                            <button
                                onClick={() => applyFilter({ category: '', level: '', price: '', search: '' })}
                                className="rounded-full bg-rose-50 px-3.5 py-1.5 text-xs font-semibold text-[#E63946] transition-all hover:bg-rose-100"
                            >
                                Reset ({activeFiltersCount})
                            </button>
                        )}
                    </div>
                </div>

                {/* Course grid */}
                {courses.data.length === 0 ? (
                    <div
                        className="flex flex-col items-center justify-center rounded-2xl py-20 text-center"
                        style={{ backgroundColor: '#FFFFFF', border: '1px dashed rgba(0,0,0,0.12)' }}
                    >
                        <div
                            className="mb-4 flex h-16 w-16 items-center justify-center rounded-2xl"
                            style={{ backgroundColor: '#F7F8FA' }}
                        >
                            <BookOpen className="h-8 w-8" style={{ color: '#118AB2' }} />
                        </div>
                        <p className="mb-1 text-base font-semibold" style={{ color: '#1A1A1A' }}>
                            Kelas tidak ditemukan
                        </p>
                        <p className="text-sm" style={{ color: '#555555' }}>
                            Coba ubah kata kunci atau hapus filter
                        </p>
                        <button
                            onClick={() => applyFilter({ category: '', level: '', price: '', search: '' })}
                            className="mt-5 rounded-xl px-6 py-2.5 text-sm font-semibold text-white transition-all hover:-translate-y-0.5"
                            style={{ backgroundColor: '#118AB2' }}
                        >
                            Lihat semua kelas
                        </button>
                    </div>
                ) : (
                    <div className="grid gap-6 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4">
                        {courses.data.map((course) => {
                            const isEnrolled = enrolledCourseIds.includes(course.id);
                            const level = levelColors[course.level] ?? { bg: '#F7F8FA', color: '#555555' };

                            return (
                                <Link
                                    key={course.id}
                                    href={`/courses/${course.slug}`}
                                    className="group flex flex-col overflow-hidden rounded-2xl bg-white transition-all duration-300 hover:-translate-y-1.5"
                                    style={{
                                        boxShadow: '0 4px 20px rgba(0,0,0,0.07)',
                                        border: '1px solid rgba(0,0,0,0.06)',
                                    }}
                                >
                                    {/* Thumbnail */}
                                    <div className="relative overflow-hidden">
                                        {course.thumbnail ? (
                                            <img
                                                src={course.thumbnail}
                                                alt={course.title}
                                                className="h-44 w-full object-cover transition-transform duration-500 group-hover:scale-105"
                                            />
                                        ) : (
                                            <div
                                                className="flex h-44 w-full items-center justify-center"
                                                style={{ background: 'linear-gradient(135deg, #E8F5FF 0%, #EBF5FB 100%)' }}
                                            >
                                                <BookOpen className="h-10 w-10" style={{ color: '#118AB2', opacity: 0.4 }} />
                                            </div>
                                        )}
                                        {/* Price badge top-right */}
                                        <div
                                            className="absolute top-3 right-3 rounded-full px-2.5 py-1 text-xs font-semibold"
                                            style={
                                                course.price_type === 'free'
                                                    ? { backgroundColor: '#06D6A0', color: '#FFFFFF' }
                                                    : { backgroundColor: 'rgba(0,0,0,0.65)', color: '#FFFFFF', backdropFilter: 'blur(4px)' }
                                            }
                                        >
                                            {course.price_type === 'free' ? 'Gratis' : formatPrice(course.price)}
                                        </div>
                                    </div>

                                    {/* Body */}
                                    <div className="flex flex-1 flex-col gap-2.5 p-5">
                                        {/* Category */}
                                        {course.category && (
                                            <span
                                                className="w-fit rounded-full px-2.5 py-0.5 text-xs font-medium"
                                                style={{ backgroundColor: 'rgba(17,138,178,0.1)', color: '#118AB2' }}
                                            >
                                                {course.category.name}
                                            </span>
                                        )}

                                        {/* Title */}
                                        <h3
                                            className="line-clamp-2 text-sm font-semibold leading-snug transition-colors group-hover:text-[#118AB2]"
                                            style={{ color: '#1A1A1A' }}
                                        >
                                            {course.title}
                                        </h3>

                                        {/* Instructor */}
                                        <p className="text-xs" style={{ color: '#777777' }}>
                                            {course.instructor.name}
                                        </p>

                                        {/* Stats */}
                                        <div className="flex items-center gap-3 text-xs" style={{ color: '#888888' }}>
                                            <span className="flex items-center gap-1">
                                                <BookOpen className="h-3 w-3" />
                                                {course.lessons_count} lesson
                                            </span>
                                            <span className="flex items-center gap-1">
                                                <Clock className="h-3 w-3" />
                                                {formatDuration(course.duration_minutes)}
                                            </span>
                                            <span className="flex items-center gap-1">
                                                <Users className="h-3 w-3" />
                                                {course.enrollments_count.toLocaleString('id-ID')}
                                            </span>
                                        </div>

                                        {/* Footer */}
                                        <div className="mt-auto flex items-center justify-between pt-2">
                                            <span
                                                className="rounded-full px-2.5 py-0.5 text-xs font-medium"
                                                style={{ backgroundColor: level.bg, color: level.color }}
                                            >
                                                {levelLabels[course.level] ?? course.level}
                                            </span>
                                            {isEnrolled ? (
                                                <Link
                                                    href={`/courses/${course.slug}/learn`}
                                                    className="flex items-center gap-1 rounded-full bg-emerald-50 px-3 py-1.5 text-xs font-bold text-emerald-600 hover:bg-emerald-100 transition-colors"
                                                    onClick={(e) => e.stopPropagation()}
                                                >
                                                    <BookOpen className="h-3 w-3" />
                                                    Mulai Belajar
                                                </Link>
                                            ) : (
                                                <span
                                                    className="text-xs font-bold"
                                                    style={{ color: '#118AB2' }}
                                                >
                                                    Lihat Detail →
                                                </span>
                                            )}
                                        </div>
                                    </div>
                                </Link>
                            );
                        })}
                    </div>
                )}

                {/* Pagination */}
                {courses.last_page > 1 && (
                    <div className="mt-10 flex items-center justify-center gap-1.5">
                        {courses.links.map((link, i) => {
                            const isArrow = link.label.includes('&laquo;') || link.label.includes('&raquo;');
                            const isPrev = link.label.includes('&laquo;');
                            return (
                                <button
                                    key={i}
                                    disabled={!link.url}
                                    onClick={() => link.url && router.visit(link.url)}
                                    className="flex h-9 min-w-[36px] items-center justify-center rounded-xl text-sm font-medium transition-all disabled:opacity-30"
                                    style={
                                        link.active
                                            ? { backgroundColor: '#118AB2', color: '#FFFFFF', boxShadow: '0 2px 10px rgba(17,138,178,0.3)' }
                                            : { backgroundColor: '#FFFFFF', color: '#555555', border: '1px solid rgba(0,0,0,0.1)' }
                                    }
                                >
                                    {isArrow ? (
                                        isPrev ? <ChevronLeft className="h-4 w-4" /> : <ChevronRight className="h-4 w-4" />
                                    ) : (
                                        <span dangerouslySetInnerHTML={{ __html: link.label }} />
                                    )}
                                </button>
                            );
                        })}
                    </div>
                )}
            </div>

            {/* Bottom padding */}
            <div className="h-16" />
        </>
    );
}

function CourseLayoutWrapper({ children }: { children: React.ReactNode }) {
    const { auth } = usePage<{ auth: Auth }>().props;
    if (auth?.user) {
        return <AppLayout noContainer={true}>{children}</AppLayout>;
    }
    return <GuestLayout>{children}</GuestLayout>;
}

CoursesIndex.layout = (page: React.ReactNode) => <CourseLayoutWrapper>{page}</CourseLayoutWrapper>;

