import { Head, router, useForm } from '@inertiajs/react';
import { ChevronLeft } from 'lucide-react';

import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import AdminLayout from '@/layouts/admin-layout';
import { type Order } from '@/types';

const ORDER_STATUSES = ['new', 'pending', 'confirmed', 'packed', 'shipped', 'delivered', 'cancelled', 'returned'];

const statusColors: Record<string, string> = {
    new: 'bg-blue-100 text-blue-700',
    pending: 'bg-yellow-100 text-yellow-700',
    confirmed: 'bg-indigo-100 text-indigo-700',
    packed: 'bg-purple-100 text-purple-700',
    shipped: 'bg-orange-100 text-orange-700',
    delivered: 'bg-green-100 text-green-700',
    cancelled: 'bg-red-100 text-red-700',
    returned: 'bg-slate-100 text-slate-700',
};

export default function AdminOrderShow({ order }: { order: Order }) {
    const { data, setData, patch, processing } = useForm({ status: order.order_status });

    const updateStatus = () => patch(route('admin.orders.updateStatus', order.id));

    return (
        <AdminLayout title={`Order ${order.invoice_no}`}>
            <Head title={`Order ${order.invoice_no}`} />

            <div className="mb-4 flex items-center gap-3">
                <Button variant="ghost" size="sm" onClick={() => router.visit('/admin/orders')}>
                    <ChevronLeft size={16} /> Back
                </Button>
            </div>

            <div className="grid gap-4 lg:grid-cols-3">
                {/* Left: Items + summary */}
                <div className="space-y-4 lg:col-span-2">
                    <Card>
                        <CardHeader><CardTitle className="text-base">Order Items</CardTitle></CardHeader>
                        <CardContent className="p-0">
                            <table className="w-full text-sm">
                                <thead className="border-b bg-slate-50 text-xs uppercase text-slate-500">
                                    <tr>
                                        <th className="px-4 py-2 text-left">Product</th>
                                        <th className="px-4 py-2 text-left">SKU</th>
                                        <th className="px-4 py-2 text-right">Price</th>
                                        <th className="px-4 py-2 text-center">Qty</th>
                                        <th className="px-4 py-2 text-right">Subtotal</th>
                                    </tr>
                                </thead>
                                <tbody className="divide-y">
                                    {order.items?.map((item) => (
                                        <tr key={item.id}>
                                            <td className="px-4 py-3 font-medium">{item.product_name}</td>
                                            <td className="px-4 py-3 font-mono text-xs text-slate-500">{item.sku}</td>
                                            <td className="px-4 py-3 text-right">৳{Number(item.price).toLocaleString()}</td>
                                            <td className="px-4 py-3 text-center">{item.qty}</td>
                                            <td className="px-4 py-3 text-right font-semibold">৳{Number(item.subtotal).toLocaleString()}</td>
                                        </tr>
                                    ))}
                                </tbody>
                            </table>

                            {/* Totals */}
                            <div className="border-t p-4 space-y-1 text-sm">
                                <div className="flex justify-between text-slate-500"><span>Subtotal</span><span>৳{Number(order.subtotal).toLocaleString()}</span></div>
                                {Number(order.discount_amount) > 0 && (
                                    <div className="flex justify-between text-green-600"><span>Discount</span><span>-৳{Number(order.discount_amount).toLocaleString()}</span></div>
                                )}
                                <div className="flex justify-between text-slate-500"><span>Shipping</span><span>৳{Number(order.shipping_charge).toLocaleString()}</span></div>
                                <div className="flex justify-between border-t pt-2 text-base font-bold"><span>Total</span><span>৳{Number(order.total_amount).toLocaleString()}</span></div>
                            </div>
                        </CardContent>
                    </Card>
                </div>

                {/* Right: Status + customer info */}
                <div className="space-y-4">
                    <Card>
                        <CardHeader><CardTitle className="text-base">Update Status</CardTitle></CardHeader>
                        <CardContent className="space-y-3">
                            <div className="flex items-center gap-2">
                                <span className="text-sm text-slate-500">Current:</span>
                                <span className={`rounded-full px-2 py-0.5 text-xs font-medium capitalize ${statusColors[order.order_status]}`}>
                                    {order.order_status}
                                </span>
                            </div>
                            <Select value={data.status} onValueChange={(v) => setData('status', v as Order['order_status'])}>
                                <SelectTrigger aria-label="Order status"><SelectValue /></SelectTrigger>
                                <SelectContent>
                                    {ORDER_STATUSES.map((s) => (
                                        <SelectItem key={s} value={s} className="capitalize">{s}</SelectItem>
                                    ))}
                                </SelectContent>
                            </Select>
                            <Button onClick={updateStatus} disabled={processing} className="w-full bg-indigo-600 hover:bg-indigo-700">
                                Update Status
                            </Button>
                        </CardContent>
                    </Card>

                    <Card>
                        <CardHeader><CardTitle className="text-base">Customer</CardTitle></CardHeader>
                        <CardContent className="space-y-2 text-sm">
                            <div><span className="text-slate-500">Name: </span><span className="font-medium">{order.customer_name}</span></div>
                            <div><span className="text-slate-500">Phone: </span><span>{order.customer_phone}</span></div>
                            {order.customer_email && <div><span className="text-slate-500">Email: </span><span>{order.customer_email}</span></div>}
                            <div><span className="text-slate-500">Payment: </span>
                                <span className="capitalize font-medium">{order.payment_method} / {order.payment_status}</span>
                            </div>
                        </CardContent>
                    </Card>

                    <Card>
                        <CardHeader><CardTitle className="text-base">Shipping Address</CardTitle></CardHeader>
                        <CardContent className="text-sm text-slate-600">{order.shipping_address}</CardContent>
                    </Card>

                    {order.note && (
                        <Card>
                            <CardHeader><CardTitle className="text-base">Note</CardTitle></CardHeader>
                            <CardContent className="text-sm text-slate-600">{order.note}</CardContent>
                        </Card>
                    )}
                </div>
            </div>
        </AdminLayout>
    );
}
