import { Head, Link } from '@inertiajs/react';

import { PublicLayout } from '@/layouts/public-layout';

type OrderItem = {
    id: number;
    product_id: number | null;
    product_name: string;
    product_slug: string | null;
    sku: string | null;
    quantity: number;
    unit_price_minor: number;
    line_total_minor: number;
};

type OrderDetails = {
    id: number;
    order_number: string;
    status: string;
    currency: string;
    subtotal_minor: number;
    total_minor: number;
    customer_name: string;
    customer_email: string;
    customer_phone: string | null;
    address_line1: string;
    address_line2: string | null;
    city: string;
    postal_code: string;
    country: string;
    notes: string | null;
    placed_at: string | null;
    items: OrderItem[];
};

type OrderShowProps = {
    order: OrderDetails;
};

export default function AccountOrderShow({ order }: OrderShowProps) {
    return (
        <PublicLayout title={order.order_number}>
            <Head title={order.order_number} />

            <div className="space-y-6">
                <div className="flex flex-wrap items-center justify-between gap-3">
                    <div>
                        <h1 className="text-2xl font-semibold text-main">
                            Order {order.order_number}
                        </h1>
                        <p className="text-sm text-muted">
                            Status: {order.status} | Placed:{' '}
                            {order.placed_at || '-'}
                        </p>
                    </div>
                    <Link
                        href="/account/orders"
                        className="rounded-lg border border-border px-3 py-1.5 text-sm font-medium text-muted hover:bg-surface hover:text-main"
                    >
                        Back to Orders
                    </Link>
                </div>

                <section className="grid gap-6 lg:grid-cols-[1fr_320px]">
                    <div className="space-y-4">
                        <div className="rounded-2xl border border-border bg-card p-4 shadow-sm">
                            <h2 className="text-base font-semibold text-main">
                                Items
                            </h2>
                            <div className="mt-3 space-y-3">
                                {order.items.map((item) => (
                                    <article
                                        key={item.id}
                                        className="rounded-xl border border-border p-3"
                                    >
                                        {item.product_slug ? (
                                            <Link
                                                href={`/products/${item.product_slug}`}
                                                className="text-sm font-semibold text-main hover:underline"
                                            >
                                                {item.product_name}
                                            </Link>
                                        ) : (
                                            <p className="text-sm font-semibold text-main">
                                                {item.product_name}
                                            </p>
                                        )}
                                        <p className="mt-1 text-xs text-muted">
                                            Qty: {item.quantity}
                                            {item.sku
                                                ? ` | SKU: ${item.sku}`
                                                : ''}
                                        </p>
                                        <p className="mt-1 text-sm text-main">
                                            {formatMoney(
                                                item.line_total_minor,
                                                order.currency,
                                            )}
                                        </p>
                                    </article>
                                ))}
                            </div>
                        </div>
                    </div>

                    <aside className="space-y-4">
                        <div className="rounded-2xl border border-border bg-card p-4 shadow-sm">
                            <h2 className="text-base font-semibold text-main">
                                Summary
                            </h2>
                            <div className="mt-3 space-y-1 text-sm text-main">
                                <p>
                                    Subtotal:{' '}
                                    {formatMoney(
                                        order.subtotal_minor,
                                        order.currency,
                                    )}
                                </p>
                                <p className="font-semibold">
                                    Total:{' '}
                                    {formatMoney(
                                        order.total_minor,
                                        order.currency,
                                    )}
                                </p>
                            </div>
                        </div>

                        <div className="rounded-2xl border border-border bg-card p-4 shadow-sm">
                            <h2 className="text-base font-semibold text-main">
                                Shipping
                            </h2>
                            <div className="mt-3 space-y-1 text-sm text-main">
                                <p>{order.customer_name}</p>
                                <p>{order.customer_email}</p>
                                {order.customer_phone ? (
                                    <p>{order.customer_phone}</p>
                                ) : null}
                                <p>{order.address_line1}</p>
                                {order.address_line2 ? (
                                    <p>{order.address_line2}</p>
                                ) : null}
                                <p>
                                    {order.city}, {order.postal_code}
                                </p>
                                <p>{order.country}</p>
                            </div>
                            {order.notes ? (
                                <div className="mt-3">
                                    <p className="text-xs font-semibold tracking-wide text-muted uppercase">
                                        Notes
                                    </p>
                                    <p className="mt-1 text-sm text-main">
                                        {order.notes}
                                    </p>
                                </div>
                            ) : null}
                        </div>
                    </aside>
                </section>
            </div>
        </PublicLayout>
    );
}

function formatMoney(minor: number, currency: string): string {
    return `${currency} ${(minor / 100).toFixed(2)}`;
}
