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

type Order = { id: number; order_number: string; status: string; payment_status: string; customer_name: string; customer_email: string; total: string; items_count: number; created_at: string };
type Pagination<T> = { data: T[]; links: { url: string | null; label: string; active: boolean }[] };

export default function AdminOrdersIndex({ orders, filters }: { orders: Pagination<Order>; filters: { search: string; status: string } }) {
    const [search, setSearch] = useState(filters.search ?? '');
    const [status, setStatus] = useState(filters.status ?? '');
    function submit(event: FormEvent) {
        event.preventDefault();
        router.get('/admin/orders', { search, status }, { preserveState: true });
    }
    return (
        <>
            <Head title="Admin Orders" />
            <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-7xl">
                    <div className="border-b border-slate-200 pb-5"><p className="text-sm font-medium text-cyan-700">Admin</p><h1 className="text-2xl font-semibold">Orders</h1></div>
                    <form onSubmit={submit} className="mt-6 grid gap-3 sm:grid-cols-[1fr_220px_auto]">
                        <input className="input" value={search} onChange={(event) => setSearch(event.target.value)} placeholder="Search order, customer, email" />
                        <select className="input" value={status} onChange={(event) => setStatus(event.target.value)}>
                            <option value="">Any status</option>
                            {['pending', 'confirmed', 'awaiting_payment', 'paid', 'processing', 'packed', 'shipped', 'delivered', 'cancelled', 'returned', 'refunded'].map((item) => <option key={item} value={item}>{item.replace('_', ' ')}</option>)}
                        </select>
                        <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">
                        {orders.data.map((order) => (
                            <div key={order.id} className="grid gap-3 p-4 lg:grid-cols-[1fr_160px_140px_100px_auto] lg:items-center">
                                <div><Link href={`/admin/orders/${order.id}`} className="font-semibold text-cyan-700">{order.order_number}</Link><p className="text-sm text-slate-500">{order.customer_name} · {order.customer_email}</p></div>
                                <p className="text-sm capitalize">{order.status.replace('_', ' ')}</p>
                                <p className="text-sm capitalize">{order.payment_status}</p>
                                <p className="text-sm font-semibold">{order.total}</p>
                                <p className="text-sm text-slate-500">{order.items_count} item(s)</p>
                            </div>
                        ))}
                    </div>
                    <nav className="mt-5 flex flex-wrap gap-2">{orders.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>
        </>
    );
}
