import { Head, Link, router } from '@inertiajs/react';
import { Droplets, Edit, Plus, Search, Trash2 } from 'lucide-react';
import { useState } from 'react';

import { Button } from '@/components/ui/button';
import { Card, CardContent } from '@/components/ui/card';
import { Input } from '@/components/ui/input';
import AdminLayout from '@/layouts/admin-layout';
import { type Brand, type PaginatedData, type Product } from '@/types';

export default function AdminFragrancesIndex({
    products,
    filters,
    brands,
}: {
    products: PaginatedData<Product>;
    filters: { search?: string; status?: string; brand_id?: string };
    brands: Brand[];
}) {
    const [search, setSearch] = useState(filters.search ?? '');

    const applyFilter = (overrides: Record<string, string>) => {
        router.get(route('admin.fragrances.index'), { search, ...overrides }, { preserveState: true });
    };

    return (
        <AdminLayout title="Fragrances">
            <Head title="Fragrances" />

            <div className="mb-6 flex items-center justify-between gap-4">
                <div className="flex items-center gap-2">
                    <Droplets size={22} className="text-violet-400" />
                    <div>
                        <h1 className="text-lg font-bold text-slate-900 dark:text-white">Fragrance Products</h1>
                        <p className="text-xs text-slate-500">{products.total} products in collection</p>
                    </div>
                </div>
                <Link href={route('admin.fragrances.create')}>
                    <Button className="bg-violet-600 hover:bg-violet-700">
                        <Plus size={15} /> Add Fragrance
                    </Button>
                </Link>
            </div>

            {/* Search / Filter bar */}
            <Card className="mb-4">
                <CardContent className="flex flex-wrap gap-3 p-4">
                    <div className="flex min-w-[220px] flex-1 items-center gap-2">
                        <Search size={15} className="text-slate-400" />
                        <Input
                            value={search}
                            onChange={(e) => setSearch(e.target.value)}
                            onKeyDown={(e) => e.key === 'Enter' && applyFilter({})}
                            placeholder="Search fragrances…"
                            className="h-8 border-none shadow-none focus-visible:ring-0"
                        />
                    </div>
                    <select
                        value={filters.brand_id ?? ''}
                        onChange={(e) => applyFilter({ brand_id: e.target.value })}
                        className="rounded-md border border-slate-200 bg-white px-3 py-1.5 text-sm dark:border-slate-700 dark:bg-slate-800"
                    >
                        <option value="">All Brands</option>
                        {brands.map((b) => (
                            <option key={b.id} value={String(b.id)}>{b.name}</option>
                        ))}
                    </select>
                    <select
                        value={filters.status ?? ''}
                        onChange={(e) => applyFilter({ status: e.target.value })}
                        className="rounded-md border border-slate-200 bg-white px-3 py-1.5 text-sm dark:border-slate-700 dark:bg-slate-800"
                    >
                        <option value="">All Status</option>
                        <option value="1">Active</option>
                        <option value="0">Inactive</option>
                    </select>
                    <Button size="sm" variant="outline" onClick={() => applyFilter({})}>Search</Button>
                </CardContent>
            </Card>

            {/* Table */}
            <Card>
                <CardContent className="p-0">
                    <div className="overflow-x-auto">
                        <table className="w-full text-sm">
                            <thead className="border-b bg-slate-50 text-xs uppercase text-slate-500 dark:border-slate-700 dark:bg-slate-800/50">
                                <tr>
                                    <th className="px-4 py-3 text-left">Product</th>
                                    <th className="px-4 py-3 text-left">SKU</th>
                                    <th className="px-4 py-3 text-right">Price</th>
                                    <th className="px-4 py-3 text-right">Stock</th>
                                    <th className="px-4 py-3 text-center">Status</th>
                                    <th className="px-4 py-3 text-center">Actions</th>
                                </tr>
                            </thead>
                            <tbody className="divide-y dark:divide-slate-700">
                                {products.data.length === 0 ? (
                                    <tr>
                                        <td colSpan={6} className="px-4 py-12 text-center">
                                            <Droplets size={36} className="mx-auto mb-3 text-slate-300" />
                                            <p className="text-slate-500">No fragrance products found.</p>
                                            <Link href={route('admin.fragrances.create')} className="mt-2 inline-block text-sm text-violet-600 hover:underline">
                                                Add your first fragrance →
                                            </Link>
                                        </td>
                                    </tr>
                                ) : (
                                    products.data.map((product) => (
                                        <tr key={product.id} className="hover:bg-slate-50 dark:hover:bg-slate-800/30">
                                            <td className="px-4 py-3">
                                                <div className="flex items-center gap-3">
                                                    {product.images?.[0] ? (
                                                        <img
                                                            src={`/storage/${product.images[0].image}`}
                                                            alt={product.name}
                                                            className="h-10 w-10 rounded-lg border object-cover"
                                                        />
                                                    ) : (
                                                        <div className="flex h-10 w-10 items-center justify-center rounded-lg bg-violet-50 dark:bg-violet-900/20">
                                                            <Droplets size={16} className="text-violet-400" />
                                                        </div>
                                                    )}
                                                    <div>
                                                        <p className="font-medium text-slate-900 dark:text-white">{product.name}</p>
                                                        {product.brand && <p className="text-xs text-slate-400">{product.brand.name}</p>}
                                                    </div>
                                                </div>
                                            </td>
                                            <td className="px-4 py-3 font-mono text-xs text-slate-500">{product.sku}</td>
                                            <td className="px-4 py-3 text-right font-semibold">৳{Number(product.price).toLocaleString()}</td>
                                            <td className="px-4 py-3 text-right">
                                                <span className={product.stock_qty > 0 ? 'text-green-600' : 'text-red-500'}>
                                                    {product.stock_qty}
                                                </span>
                                            </td>
                                            <td className="px-4 py-3 text-center">
                                                <button
                                                    onClick={() => router.post(route('admin.fragrances.toggleStatus', product.id))}
                                                    className={`inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium ${
                                                        product.status
                                                            ? 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400'
                                                            : 'bg-slate-100 text-slate-500 dark:bg-slate-700 dark:text-slate-400'
                                                    }`}
                                                >
                                                    {product.status ? 'Active' : 'Inactive'}
                                                </button>
                                            </td>
                                            <td className="px-4 py-3 text-center">
                                                <div className="flex items-center justify-center gap-1">
                                                    <Link href={route('admin.fragrances.edit', product.id)}>
                                                        <Button variant="ghost" size="sm" className="h-7 w-7 p-0">
                                                            <Edit size={13} />
                                                        </Button>
                                                    </Link>
                                                    <Button
                                                        variant="ghost"
                                                        size="sm"
                                                        className="h-7 w-7 p-0 text-red-500 hover:bg-red-50 hover:text-red-600"
                                                        onClick={() => {
                                                            if (confirm('Delete this fragrance product?')) {
                                                                router.delete(route('admin.fragrances.destroy', product.id));
                                                            }
                                                        }}
                                                    >
                                                        <Trash2 size={13} />
                                                    </Button>
                                                </div>
                                            </td>
                                        </tr>
                                    ))
                                )}
                            </tbody>
                        </table>
                    </div>

                    {/* Pagination */}
                    {products.last_page > 1 && (
                        <div className="flex items-center justify-between border-t px-4 py-3 text-sm dark:border-slate-700">
                            <span className="text-slate-500">
                                Showing {products.from}–{products.to} of {products.total}
                            </span>
                            <div className="flex gap-1">
                                {products.links.map((link, i) => (
                                    <button
                                        key={i}
                                        disabled={!link.url}
                                        onClick={() => link.url && router.visit(link.url)}
                                        className={`rounded px-2.5 py-1 text-xs ${
                                            link.active
                                                ? 'bg-violet-600 text-white'
                                                : 'border text-slate-600 hover:bg-slate-50 disabled:opacity-40 dark:border-slate-600 dark:text-slate-400'
                                        }`}
                                        dangerouslySetInnerHTML={{ __html: link.label }}
                                    />
                                ))}
                            </div>
                        </div>
                    )}
                </CardContent>
            </Card>
        </AdminLayout>
    );
}
