import { Head, Link, router } from '@inertiajs/react';
import { ChevronLeft, ChevronRight, Leaf, Package, Search, X, SlidersHorizontal, Coffee, Bean, Droplets, Sprout } from 'lucide-react';
import { useEffect, useState } from 'react';
import EmptyState from '@/components/frontend/EmptyState';
import { Input } from '@/components/ui/input';
import { cn } from '@/lib/utils';

type ProductCard = {
    id: number;
    name: string;
    slug: string;
    origin: string | null;
    variety: string | null;
    fermentation: string | null;
    fat_content: string | number | null;
    bean_count: string | null;
    short_description: string | null;
    image: string | null;
    category_name: string | null;
    category_slug: string | null;
};

type PaginationLink = { url: string | null; label: string; active: boolean };
type Paginated = { data: ProductCard[]; links: PaginationLink[]; last_page: number; prev_page_url: string | null; next_page_url: string | null };
type Props = { products: Paginated; categories: { name: string; slug: string }[]; filters: { q?: string; category?: string; fermentation?: string; process?: string }; suggestions: ProductCard[]; locale: string; seo: { title: string; description: string } };

const popularKeywords = ['Sulawesi', 'Flores', 'Forastero', 'Fermented', 'Nibs', 'Powder'];

const categoryIcons: Record<string, React.ReactNode> = {
    'cocoa-beans': <Bean className="size-4" />,
    'cocoa-nibs': <Coffee className="size-4" />,
    'cocoa-powder': <Droplets className="size-4" />,
    'cocoa-butter': <Sprout className="size-4" />,
};

const fermentationOptions = [
    { value: 'fermented', label: 'Fermented', color: 'bg-emerald-500' },
    { value: 'unfermented', label: 'Unfermented', color: 'bg-amber-500' },
    { value: 'dried', label: 'Dried', color: 'bg-orange-500' },
    { value: 'light-fermented', label: 'Light Fermented', color: 'bg-lime-500' },
] as const;

export default function Products({ products, categories, filters, suggestions, locale, seo }: Props) {
    const isEn = locale === 'en';
    const [q, setQ] = useState(filters.q ?? '');

    useEffect(() => {
        if ((q || '') === (filters.q || '')) {
            return;
        }
        const t = setTimeout(() => {
            router.get(`/${locale}/produk`, { q: q || undefined, category: filters.category, fermentation: filters.fermentation }, { preserveState: true, preserveScroll: true, replace: true, only: ['products', 'filters'] });
        }, 400);
        return () => clearTimeout(t);
        // eslint-disable-next-line react-hooks/exhaustive-deps
    }, [q]);

    return (
        <>
            <Head title={seo.title}>
                <meta name="description" content={seo.description} />
            </Head>

            {/* Hero editorial — tanpa search */}
            <section className="relative overflow-hidden bg-[#FFF9F5] dark:bg-[#0F0A07]">
                <div className="pointer-events-none absolute -top-20 -right-20 size-96 rounded-full bg-[#A05A2C]/10 blur-3xl" />
                <div className="mx-auto w-full max-w-7xl px-4 py-10 sm:px-6 lg:px-8 lg:py-14">
                    <div className="max-w-3xl">
                        <span className="inline-flex items-center gap-2 rounded-full border border-[#A05A2C]/15 bg-[#A05A2C]/10 px-3 py-1 text-xs font-semibold tracking-widest text-[#A05A2C]">
                            <span className="size-1.5 rounded-full bg-[#A05A2C]" />
                            {isEn ? 'OUR PRODUCTS' : 'PRODUK KAMI'}
                        </span>
                        <h1 className="mt-4 font-poppins text-3xl font-bold leading-[1.05] tracking-tight text-[#2B1B12] sm:text-4xl dark:text-white">{isEn ? 'Premium Cocoa' : 'Cocoa Berkualitas'}</h1>
                        <p className="mt-3 max-w-xl text-sm leading-relaxed text-[#6B5B4F] dark:text-white/70">{seo.description}</p>
                        <div className="mt-5 flex flex-wrap gap-2">
                            <span className="inline-flex items-center gap-1.5 rounded-full bg-[#6B2F0B] px-3 py-1.5 text-xs font-semibold text-white">
                                <Package className="size-3.5" /> {products.data.length ? `${products.data.length} ${isEn ? 'Products' : 'Produk'}` : isEn ? 'Catalog' : 'Katalog'}
                            </span>
                            <span className="inline-flex items-center gap-1.5 rounded-full border border-[#A05A2C]/20 bg-white px-3 py-1.5 text-xs font-medium text-[#A05A2C] dark:bg-white/5 dark:text-white">
                                <Leaf className="size-3.5" /> FOB Makassar • Surabaya
                            </span>
                        </div>
                    </div>
                </div>
            </section>

            {/* Filter + Grid — sidebar filter layout */}
            <section className="bg-white dark:bg-[#0F0A07]">
                <div className="mx-auto max-w-7xl px-4 py-8 sm:px-6 lg:px-8 lg:py-10">
                    {/* Search bar — full width */}
                    <div className="mx-auto max-w-2xl">
                        <div className="relative">
                            <Search className="pointer-events-none absolute left-4 top-1/2 size-4 -translate-y-1/2 text-[#6B5B4F]/60" />
                            <Input
                                value={q}
                                onChange={(e) => setQ(e.target.value)}
                                placeholder={isEn ? 'Search: Sulawesi, Flores, Fermented...' : 'Cari: Sulawesi, Flores, Fermented...'}
                                className="h-12 rounded-2xl border-[#A05A2C]/15 bg-[#FFF9F5] pl-11 text-sm placeholder:text-[#6B5B4F]/40 focus:border-[#A05A2C]/40 focus:ring-[#A05A2C]/20 dark:bg-white/[0.04] dark:border-white/10"
                            />
                            {q && (
                                <button
                                    type="button"
                                    onClick={() => setQ('')}
                                    className="absolute right-3 top-1/2 -translate-y-1/2 rounded-full p-1 text-[#6B5B4F]/40 transition hover:bg-[#A05A2C]/10 hover:text-[#A05A2C]"
                                >
                                    <X className="size-3.5" />
                                </button>
                            )}
                        </div>
                    </div>

                    {/* Active filters bar */}
                    {(filters.category || filters.fermentation) && (
                        <div className="mx-auto mt-4 max-w-2xl">
                            <div className="flex items-center gap-2 rounded-xl bg-[#FFF9F5] px-4 py-2.5 dark:bg-white/[0.04]">
                                <SlidersHorizontal className="size-3.5 text-[#A05A2C]" />
                                <span className="text-xs font-medium text-[#6B5B4F] dark:text-white/60">
                                    {isEn ? 'Active filters:' : 'Filter aktif:'}
                                </span>
                                <div className="flex flex-wrap items-center gap-1.5">
                                    {filters.category && (
                                        <span className="inline-flex items-center gap-1 rounded-full bg-[#6B2F0B] px-2.5 py-0.5 text-[11px] font-semibold text-white">
                                            {categories.find((c) => c.slug === filters.category)?.name ?? filters.category}
                                            <Link href={`/${locale}/produk?${filters.fermentation ? `fermentation=${filters.fermentation}` : ''}`} className="ml-0.5 rounded-full p-0.5 transition hover:bg-white/20">
                                                <X className="size-2.5" />
                                            </Link>
                                        </span>
                                    )}
                                    {filters.fermentation && (
                                        <span className="inline-flex items-center gap-1 rounded-full bg-[#A05A2C] px-2.5 py-0.5 text-[11px] font-semibold text-white capitalize">
                                            {filters.fermentation}
                                            <Link href={`/${locale}/produk?${filters.category ? `category=${filters.category}` : ''}`} className="ml-0.5 rounded-full p-0.5 transition hover:bg-white/20">
                                                <X className="size-2.5" />
                                            </Link>
                                        </span>
                                    )}
                                </div>
                                <Link
                                    href={`/${locale}/produk`}
                                    className="ml-auto text-[11px] font-medium text-[#A05A2C] underline-offset-2 hover:underline"
                                >
                                    {isEn ? 'Clear all' : 'Hapus semua'}
                                </Link>
                            </div>
                        </div>
                    )}

                    {/* Two-column layout: sidebar + grid */}
                    <div className="mt-8 flex flex-col gap-8 lg:flex-row">
                    {/* Sidebar filter */}
                    <aside className="w-full shrink-0 lg:sticky lg:top-24 lg:h-fit lg:w-60">
                        <div className="space-y-6">
                            {/* Category filter */}
                            <div className="rounded-2xl border border-[#A05A2C]/10 bg-[#FFF9F5]/60 p-4 dark:border-white/10 dark:bg-white/[0.04]">
                                <h3 className="mb-3 text-xs font-semibold uppercase tracking-wider text-[#6B5B4F]/70 dark:text-white/50">
                                    {isEn ? 'Category' : 'Kategori'}
                                </h3>
                                <div className="space-y-1">
                                    <Link
                                        href={`/${locale}/produk`}
                                        className={cn(
                                            'flex items-center gap-2.5 rounded-xl px-3 py-2 text-sm font-medium transition',
                                            !filters.category
                                                ? 'bg-[#6B2F0B] text-white shadow-sm'
                                                : 'text-[#2B1B12] hover:bg-[#A05A2C]/10 dark:text-white/80 dark:hover:bg-white/5',
                                        )}
                                    >
                                        <Package className="size-4" />
                                        {isEn ? 'All Products' : 'Semua Produk'}
                                    </Link>
                                    {categories.map((c) => {
                                        const icon = categoryIcons[c.slug] ?? <Package className="size-4" />;
                                        return (
                                            <Link
                                                key={c.slug}
                                                href={`/${locale}/produk?category=${c.slug}${filters.fermentation ? `&fermentation=${filters.fermentation}` : ''}`}
                                                className={cn(
                                                    'flex items-center gap-2.5 rounded-xl px-3 py-2 text-sm font-medium transition',
                                                    filters.category === c.slug
                                                        ? 'bg-[#6B2F0B] text-white shadow-sm'
                                                        : 'text-[#2B1B12] hover:bg-[#A05A2C]/10 dark:text-white/80 dark:hover:bg-white/5',
                                                )}
                                            >
                                                {icon}
                                                {c.name}
                                            </Link>
                                        );
                                    })}
                                </div>
                            </div>

                            {/* Fermentation filter */}
                            <div className="rounded-2xl border border-[#A05A2C]/10 bg-[#FFF9F5]/60 p-4 dark:border-white/10 dark:bg-white/[0.04]">
                                <h3 className="mb-3 text-xs font-semibold uppercase tracking-wider text-[#6B5B4F]/70 dark:text-white/50">
                                    {isEn ? 'Fermentation' : 'Fermentasi'}
                                </h3>
                                <div className="flex flex-wrap gap-2 lg:flex-col lg:gap-1">
                                    {fermentationOptions.map((opt) => (
                                        <Link
                                            key={opt.value}
                                            href={`/${locale}/produk?fermentation=${opt.value}${filters.category ? `&category=${filters.category}` : ''}`}
                                            className={cn(
                                                'flex items-center gap-2 rounded-xl px-3 py-2 text-sm font-medium transition lg:px-3',
                                                filters.fermentation === opt.value
                                                    ? 'bg-[#A05A2C] text-white shadow-sm'
                                                    : 'text-[#2B1B12] hover:bg-[#A05A2C]/10 dark:text-white/80 dark:hover:bg-white/5',
                                            )}
                                        >
                                            <span className={cn('size-2 rounded-full', filters.fermentation === opt.value ? 'bg-white/60' : opt.color)} />
                                            {opt.label}
                                        </Link>
                                    ))}
                                </div>
                            </div>
                        </div>
                    </aside>

                    {/* Product grid */}
                    <div className="min-w-0 flex-1">
                    {products.data.length ? (
                        <>
                            <div className="grid gap-6 sm:grid-cols-2 xl:grid-cols-3">
                                {products.data.map((p) => (
                                    <Link
                                        key={p.id}
                                        href={`/${locale}/produk/${p.slug}`}
                                        className="group relative flex flex-col overflow-hidden rounded-[24px] border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-md dark:border-white/10 dark:bg-white/[0.04]"
                                    >
                                        <div className="absolute top-0 left-0 h-1 w-full bg-[#A05A2C]/80 opacity-0 transition group-hover:opacity-100" />
                                        <div className="overflow-hidden bg-[#F5EFE8] dark:bg-white/5 aspect-video">
                                                {p.image ? (
                                                    <img src={p.image} alt={p.name} loading="lazy" className="h-full w-full object-cover transition duration-500 group-hover:scale-105" />
                                                ) : (
                                                    <div className="flex h-full items-center justify-center text-xs text-[#6B5B4F]">{isEn ? 'No image' : 'Tanpa gambar'}</div>
                                                )}
                                            </div>
                                            <div className="flex flex-1 flex-col p-5">
                                                <div className="flex items-center gap-2">
                                                    {p.category_name && <span className="rounded-full bg-[#FFF9F5] px-2.5 py-1 text-[11px] font-medium text-[#A05A2C] dark:bg-white/10 dark:text-white">{p.category_name}</span>}
                                                    {p.fat_content && <span className="rounded-full bg-[#6B2F0B] px-2.5 py-1 text-[11px] font-bold text-white">{p.fat_content}% fat</span>}
                                                </div>
                                                <h3 className="mt-3 font-poppins text-base font-semibold leading-tight text-[#2B1B12] group-hover:text-[#A05A2C] dark:text-white">{p.name}</h3>
                                                <p className="mt-1 text-xs text-[#6B5B4F] dark:text-white/60">{[p.origin, p.variety, p.fermentation].filter(Boolean).join(' • ')}</p>
                                                <p className="mt-2 line-clamp-2 flex-1 text-xs leading-relaxed text-[#6B5B4F] dark:text-white/60">{p.short_description}</p>
                                                <span className="mt-4 inline-flex items-center gap-1 text-xs font-semibold text-[#A05A2C] opacity-0 transition group-hover:opacity-100">
                                                    {isEn ? 'View details' : 'Lihat detail'} <ChevronRight className="size-3" />
                                                </span>
                                            </div>
                                        </Link>
                                    ))}
                            </div>
                            {products.last_page > 1 && (
                                <nav className="mt-10 flex items-center justify-center gap-1">
                                    <Arrow href={products.prev_page_url} disabled={!products.prev_page_url}>
                                        <ChevronLeft className="size-4" />
                                    </Arrow>
                                    {products.links
                                        .filter((l) => l.url && l.label !== 'pagination.previous' && l.label !== 'pagination.next' && !/[«»&]/.test(l.label) && !isNaN(Number(l.label)))
                                        .map((l, i) => (
                                            <Link
                                                key={`${l.label}-${i}`}
                                                href={l.url!}
                                                preserveScroll
                                                className={cn(
                                                    'inline-flex size-9 items-center justify-center rounded-md text-sm transition',
                                                    l.active ? 'bg-[#6B2F0B] font-semibold text-white' : 'text-[#6B5B4F] hover:bg-[#FFF9F5] dark:text-white/60',
                                                )}
                                            >
                                                {l.label}
                                            </Link>
                                        ))}
                                    <Arrow href={products.next_page_url} disabled={!products.next_page_url}>
                                        <ChevronRight className="size-4" />
                                    </Arrow>
                                </nav>
                            )}
                        </>
                    ) : (
                        <div className="rounded-[24px] border bg-white p-8 shadow-sm dark:border-white/10 dark:bg-white/[0.04]">
                            <EmptyState title={isEn ? 'No products match your search/filters.' : 'Tidak ada produk yang cocok dengan pencarian/filter.'} description={isEn ? 'Try the popular keywords below or browse our product recommendations.' : 'Coba kata kunci populer di bawah atau lihat rekomendasi produk kami.'} />
                            <div className="mt-4 flex flex-wrap items-center justify-center gap-2">
                                {popularKeywords.map((k) => (
                                    <button
                                        key={k}
                                        type="button"
                                        onClick={() => setQ(k)}
                                        className="rounded-full border px-3 py-1.5 text-xs font-medium text-[#2B1B12] transition hover:border-[#A05A2C] hover:text-[#A05A2C] dark:border-white/10 dark:text-white"
                                    >
                                        {k}
                                    </button>
                                ))}
                            </div>
                            {suggestions.length > 0 && (
                                <div className="mt-10">
                                    <p className="text-center font-poppins text-sm font-semibold text-[#2B1B12] dark:text-white">{isEn ? 'Product Recommendations' : 'Rekomendasi Produk'}</p>
                                    <div className="mx-auto mt-2 h-0.5 w-10 rounded bg-[#A05A2C]" />
                                    <div className="mt-6 grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
                                        {suggestions.map((p) => (
                                            <Link
                                                key={p.id}
                                                href={`/${locale}/produk/${p.slug}`}
                                                className="group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-md dark:border-white/10 dark:bg-white/5"
                                            >
                                                <div className="aspect-video overflow-hidden bg-[#F5EFE8] dark:bg-white/5">
                                                    {p.image ? (
                                                        <img src={p.image} alt={p.name} loading="lazy" className="h-full w-full object-cover transition group-hover:scale-105" />
                                                    ) : (
                                                        <img src="/assets-elfatih/image-default.png" alt={p.name} loading="lazy" className="h-full w-full object-cover" />
                                                    )}
                                                </div>
                                                <div className="p-4">
                                                    <p className="line-clamp-1 font-poppins text-sm font-semibold text-[#2B1B12] dark:text-white">{p.name}</p>
                                                    <p className="text-[11px] text-[#6B5B4F] dark:text-white/60">{[p.origin, p.variety].filter(Boolean).join(' • ')}</p>
                                                </div>
                                            </Link>
                                        ))}
                                    </div>
                                </div>
                            )}
                        </div>
                    )}
                    </div>
                    </div>
                </div>
            </section>
        </>
    );
}

function Arrow({ href, disabled, children }: { href: string | null; disabled: boolean; children: React.ReactNode }) {
    if (disabled || !href) {
        return <span className="inline-flex size-9 items-center justify-center text-[#6B5B4F]/40">{children}</span>;
    }
    return (
        <Link href={href} preserveScroll className="inline-flex size-9 items-center justify-center rounded-md text-[#6B5B4F] hover:bg-[#FFF9F5] dark:text-white/60">
            {children}
        </Link>
    );
}
