import { Head, Link, router } from '@inertiajs/react';
import type { FormEvent } from 'react';
import { useState } from 'react';

type Category = { id: number; name: string; slug: string; system_type: string | null; is_active: boolean; products_count: number; parent: { name: string } | null };
type Pagination<T> = { data: T[]; links: { url: string | null; label: string; active: boolean }[] };

export default function CategoriesIndex({ categories, filters }: { categories: Pagination<Category>; filters: { search: string } }) {
    const [search, setSearch] = useState(filters.search ?? '');
    function submit(event: FormEvent) {
        event.preventDefault();
        router.get('/admin/categories', { search }, { preserveState: true });
    }
    return (
        <>
            <Head title="Admin Categories" />
            <main className="min-h-screen bg-slate-50 px-4 py-6 text-slate-900 sm:px-6 lg:px-8">
                <div className="mx-auto max-w-6xl">
                    <div className="flex items-end justify-between gap-3 border-b border-slate-200 pb-5"><div><p className="text-sm font-medium text-cyan-700">Admin</p><h1 className="text-2xl font-semibold">Categories</h1></div><Link href="/admin/categories/create" className="rounded-md bg-cyan-700 px-4 py-2 text-sm font-semibold text-white">Add category</Link></div>
                    <form onSubmit={submit} className="mt-6 flex gap-3"><input className="input" value={search} onChange={(event) => setSearch(event.target.value)} placeholder="Search categories" /><button className="rounded-md border border-slate-300 bg-white px-4 py-2 text-sm font-semibold">Search</button></form>
                    <div className="mt-5 divide-y divide-slate-200 overflow-hidden rounded-lg border border-slate-200 bg-white">
                        {categories.data.map((category) => (
                            <div key={category.id} className="grid gap-3 p-4 sm:grid-cols-[1fr_auto] sm:items-center">
                                <div><h2 className="font-semibold">{category.name}</h2><p className="text-sm text-slate-500">{category.slug} · {category.parent?.name ?? 'Top level'} · {category.system_type ?? 'No system'} · {category.products_count} products · {category.is_active ? 'active' : 'inactive'}</p></div>
                                <Link href={`/admin/categories/${category.id}/edit`} className="text-sm font-semibold text-cyan-700">Edit</Link>
                            </div>
                        ))}
                    </div>
                    <nav className="mt-5 flex flex-wrap gap-2">{categories.links.map((link) => <Link key={link.label} href={link.url ?? '#'} className={`rounded-md border px-3 py-2 text-sm ${link.active ? 'border-cyan-700 bg-cyan-700 text-white' : 'border-slate-300 bg-white text-slate-700'} ${link.url ? '' : 'pointer-events-none opacity-50'}`} dangerouslySetInnerHTML={{ __html: link.label }} />)}</nav>
                </div>
            </main>
        </>
    );
}
