import { Head, Link } from '@inertiajs/react';
import { Check, CheckCircle2, ChevronRight, Home, Package, Phone, ReceiptText, ShoppingBag, Truck } from 'lucide-react';

import FrontendLayout from '@/layouts/frontend-layout';
import { useLang } from '@/lib/lang';
import { type Order } from '@/types';

const steps = ['Cart', 'Information', 'Delivery', 'Payment', 'Confirmed'];

function formatMoney(value: number | string) {
    return `Tk ${Number(value || 0).toLocaleString()}`;
}

function SuccessStepper() {
    return (
        <section className="ornament-bg border-b border-[var(--brand-line)] bg-[var(--brand-ivory)]">
            <div className="mx-auto max-w-[1500px] px-4 py-5 sm:px-6 lg:px-10">
                {/* Desktop stepper */}
                <ol className="hidden items-center justify-center gap-3 md:flex">
                    {steps.map((step, index) => (
                        <li key={step} className="flex items-center gap-3">
                            <span className="flex h-8 w-8 items-center justify-center rounded-full border border-[var(--brand-gold)] bg-[var(--brand-ivory)] font-mono text-[11px] text-[var(--brand-gold)]">
                                <Check size={13} />
                            </span>
                            <span
                                className={`text-xs tracking-[0.18em] uppercase ${
                                    index === steps.length - 1 ? 'font-medium text-[var(--brand-ink)]' : 'text-[var(--brand-muted)]'
                                }`}
                            >
                                {step}
                            </span>
                            {index < steps.length - 1 && <span className="hidden h-px w-8 bg-[var(--brand-gold)] lg:inline-block" />}
                        </li>
                    ))}
                </ol>

                {/* Mobile progress bar */}
                <div className="md:hidden">
                    <div className="mb-2 flex items-center justify-between text-xs">
                        <span className="eyebrow text-[var(--brand-gold-dim)]">Step 05 / 05</span>
                        <span className="font-medium text-[var(--brand-ink)]">Confirmed ✓</span>
                    </div>
                    <div className="h-1 rounded-full bg-[var(--brand-line)]">
                        <div className="h-full w-full rounded-full bg-[var(--brand-gold)]" />
                    </div>
                </div>
            </div>
        </section>
    );
}

function StatusBadge({ status }: { status: Order['order_status'] }) {
    const label = status.charAt(0).toUpperCase() + status.slice(1);
    return (
        <span className="inline-flex items-center gap-2 border border-[var(--brand-gold)] bg-[var(--brand-cream)] px-3 py-1.5 text-xs font-medium tracking-[0.14em] uppercase text-[var(--brand-gold-dim)]">
            <span className="h-1.5 w-1.5 rounded-full bg-[var(--brand-gold)]" />
            {label}
        </span>
    );
}

function InfoTile({ label, value }: { label: string; value: string }) {
    return (
        <div className="border border-[var(--brand-line)] bg-white p-4">
            <p className="eyebrow text-[var(--brand-muted)]">{label}</p>
            <p className="mt-1.5 text-sm font-medium leading-6 text-[var(--brand-ink)]">{value}</p>
        </div>
    );
}

// ─── Order Items ──────────────────────────────────────────────────────────────

function OrderItems({ items }: { items: NonNullable<Order['items']> }) {
    return (
        <>
            {/* Mobile: card list */}
            <div className="divide-y divide-[var(--brand-line)] md:hidden">
                {items.map((item) => (
                    <div key={item.id} className="flex items-start gap-3 p-4">
                        <span className="flex h-10 w-10 shrink-0 items-center justify-center border border-[var(--brand-line)] bg-white text-[var(--brand-gold)]">
                            <Package size={16} />
                        </span>
                        <div className="min-w-0 flex-1">
                            <p className="text-sm font-medium leading-snug text-[var(--brand-ink)]">{item.product_name}</p>
                            <p className="mt-0.5 font-mono text-[10px] text-[var(--brand-muted)]">{item.sku || '—'}</p>
                            <div className="mt-2 flex items-center justify-between gap-2">
                                <span className="text-xs text-[var(--brand-muted)]">Qty: {item.qty}</span>
                                <span className="text-sm font-semibold text-[var(--brand-ink)]">
                                    {formatMoney(Number(item.price) * item.qty)}
                                </span>
                            </div>
                        </div>
                    </div>
                ))}
            </div>

            {/* Desktop: table */}
            <div className="hidden overflow-x-auto md:block">
                <table className="w-full border-collapse text-left text-sm">
                    <thead>
                        <tr className="border-b border-[var(--brand-line)] text-xs tracking-[0.16em] uppercase text-[var(--brand-muted)]">
                            <th className="px-6 py-3 font-medium lg:px-8">Product</th>
                            <th className="px-4 py-3 font-medium">SKU</th>
                            <th className="px-4 py-3 font-medium">Qty</th>
                            <th className="px-6 py-3 text-right font-medium lg:px-8">Line total</th>
                        </tr>
                    </thead>
                    <tbody>
                        {items.map((item) => (
                            <tr key={item.id} className="border-b border-[var(--brand-line)] last:border-0">
                                <td className="px-6 py-4 lg:px-8">
                                    <div className="flex items-center gap-3">
                                        <span className="flex h-10 w-10 shrink-0 items-center justify-center border border-[var(--brand-line)] bg-white text-[var(--brand-gold)]">
                                            <Package size={16} />
                                        </span>
                                        <span className="font-medium text-[var(--brand-ink)]">{item.product_name}</span>
                                    </div>
                                </td>
                                <td className="px-4 py-4 font-mono text-xs text-[var(--brand-muted)]">{item.sku || '—'}</td>
                                <td className="px-4 py-4 text-[var(--brand-muted)]">{item.qty}</td>
                                <td className="px-6 py-4 text-right font-semibold text-[var(--brand-ink)] lg:px-8">
                                    {formatMoney(Number(item.price) * item.qty)}
                                </td>
                            </tr>
                        ))}
                    </tbody>
                </table>
            </div>
        </>
    );
}

// ─── Page ─────────────────────────────────────────────────────────────────────

export default function CheckoutSuccess({ order }: { order: Order }) {
    const { t } = useLang();
    const itemCount = order.items?.reduce((total, item) => total + item.qty, 0) ?? 0;

    return (
        <FrontendLayout headerVariant="success">
            <Head title={t.success.title} />

            <div className="bg-[var(--brand-cream)] text-[var(--brand-ink)]">
                <SuccessStepper />

                <main className="mx-auto grid max-w-[1500px] gap-6 px-4 py-6 sm:px-6 sm:py-8 lg:grid-cols-[minmax(0,1fr)_380px] lg:gap-8 lg:px-10 lg:py-12">

                    {/* ── Left column ── */}
                    <div className="min-w-0 space-y-5">

                        {/* ── Hero confirmation card ── */}
                        <section className="overflow-hidden border border-[var(--brand-line)] bg-[var(--brand-ivory)]">
                            <div className="ornament-bg border-b border-[var(--brand-line)] p-5 sm:p-6 md:p-8">
                                <div className="flex flex-col gap-5 sm:gap-6 md:flex-row md:items-start md:justify-between">

                                    {/* Success text */}
                                    <div className="min-w-0">
                                        <div className="mb-4 flex h-14 w-14 items-center justify-center rounded-full border border-[var(--brand-gold)] bg-white text-[var(--brand-gold)] sm:h-16 sm:w-16">
                                            <CheckCircle2 size={28} className="sm:hidden" />
                                            <CheckCircle2 size={34} className="hidden sm:block" />
                                        </div>
                                        <p className="eyebrow text-[var(--brand-gold-dim)]">Order confirmation</p>
                                        <h1 className="font-display mt-2 text-4xl leading-[1] text-[var(--brand-ink)] sm:text-5xl md:text-6xl lg:text-7xl">
                                            {t.success.heading}
                                        </h1>
                                        <p className="mt-3 text-sm leading-7 text-[var(--brand-muted)] sm:text-base">
                                            {t.success.subtitle}
                                        </p>
                                    </div>

                                    {/* Invoice card */}
                                    <div className="w-full shrink-0 border border-[var(--brand-line)] bg-white p-4 sm:p-5 md:w-60 lg:w-64">
                                        <p className="eyebrow text-[var(--brand-muted)]">{t.success.invoiceNumber}</p>
                                        <p className="font-display mt-2 break-all text-2xl leading-tight text-[var(--brand-ink)] sm:text-3xl">
                                            {order.invoice_no}
                                        </p>
                                        <div className="mt-4">
                                            <StatusBadge status={order.order_status} />
                                        </div>
                                    </div>
                                </div>
                            </div>

                            {/* Customer info tiles */}
                            <div className="grid gap-3 p-4 sm:p-5 sm:grid-cols-2 md:grid-cols-3 md:p-6">
                                <InfoTile label={t.success.customer} value={order.customer_name} />
                                <InfoTile label={t.success.phone} value={order.customer_phone} />
                                <InfoTile label={t.success.deliveryAddress} value={order.shipping_address} />
                            </div>
                        </section>

                        {/* ── Order items ── */}
                        <section className="overflow-hidden border border-[var(--brand-line)] bg-[var(--brand-ivory)]">
                            <header className="flex items-center justify-between gap-3 border-b border-[var(--brand-line)] p-4 sm:p-5 md:p-6">
                                <div>
                                    <p className="eyebrow text-[var(--brand-gold-dim)]">Order contents</p>
                                    <h2 className="font-display mt-1 text-2xl text-[var(--brand-ink)] sm:text-3xl">
                                        {t.success.items}
                                    </h2>
                                </div>
                                <div className="flex shrink-0 items-center gap-2 text-sm text-[var(--brand-muted)]">
                                    <ShoppingBag size={15} className="text-[var(--brand-gold)]" />
                                    <span>{itemCount} {itemCount === 1 ? 'item' : 'items'}</span>
                                </div>
                            </header>

                            {order.items && order.items.length > 0 && (
                                <OrderItems items={order.items} />
                            )}
                        </section>

                        {/* ── What's next + COD ── */}
                        <section className="grid gap-4 sm:grid-cols-2">
                            {/* What's next */}
                            <div className="border border-[var(--brand-line)] bg-[var(--brand-ivory)] p-5 md:p-6">
                                <p className="eyebrow text-[var(--brand-gold-dim)]">{t.success.whatsNext}</p>
                                <ol className="mt-4 space-y-3.5 text-sm text-[var(--brand-muted)]">
                                    {[t.success.step1, t.success.step2, t.success.step3, t.success.step4].map((step, index) => (
                                        <li key={step} className="flex gap-3">
                                            <span className="flex h-6 w-6 shrink-0 items-center justify-center rounded-full border border-[var(--brand-gold)] font-mono text-[10px] text-[var(--brand-gold-dim)]">
                                                0{index + 1}
                                            </span>
                                            <span className="leading-6">{step}</span>
                                        </li>
                                    ))}
                                </ol>
                            </div>

                            {/* COD card */}
                            <div className="border border-[var(--brand-line)] bg-[var(--brand-slate)] p-5 text-[var(--brand-ivory)] md:p-6">
                                <p className="eyebrow text-[var(--brand-gold)]">Payment on delivery</p>
                                <div className="mt-4 flex items-start gap-3">
                                    <span className="flex h-10 w-10 shrink-0 items-center justify-center border border-white/10 text-[var(--brand-gold)]">
                                        <Truck size={18} />
                                    </span>
                                    <div className="min-w-0">
                                        <h3 className="font-display text-2xl sm:text-3xl">{t.success.cod}</h3>
                                        <p className="mt-1.5 text-sm leading-6 text-white/70">
                                            {t.success.codReadyPrefix}
                                            {formatMoney(order.total_amount).replace('Tk ', '')}
                                            {t.success.codReadySuffix}
                                        </p>
                                    </div>
                                </div>
                                <div className="mt-5 border-t border-white/10 pt-4 text-sm leading-6 text-white/70">
                                    {t.success.needHelp}{' '}
                                    <span className="break-all font-mono text-xs text-[var(--brand-ivory)]">{order.invoice_no}</span>.
                                </div>
                            </div>
                        </section>
                    </div>

                    {/* ── Right column / aside ── */}
                    <aside className="space-y-4 lg:sticky lg:top-24 lg:self-start">

                        {/* Receipt + totals */}
                        <section className="border border-[var(--brand-line)] bg-[var(--brand-ivory)] p-5 shadow-[0_30px_80px_-60px_rgba(0,0,0,.45)]">
                            <div className="flex items-center gap-3">
                                <span className="flex h-10 w-10 shrink-0 items-center justify-center border border-[var(--brand-line)] bg-white text-[var(--brand-gold)]">
                                    <ReceiptText size={18} />
                                </span>
                                <div className="min-w-0">
                                    <p className="eyebrow text-[var(--brand-gold-dim)]">Receipt</p>
                                    <p className="truncate font-mono text-xs text-[var(--brand-muted)]">{order.invoice_no}</p>
                                </div>
                            </div>

                            <div className="mt-5 space-y-3 border-t border-[var(--brand-line)] pt-5 text-sm">
                                <div className="flex justify-between gap-3">
                                    <span className="text-[var(--brand-muted)]">{t.success.subtotal}</span>
                                    <span className="shrink-0">{formatMoney(order.subtotal)}</span>
                                </div>
                                {Number(order.discount_amount) > 0 && (
                                    <div className="flex justify-between gap-3 text-[#4A7A4A]">
                                        <span>{t.success.discount}</span>
                                        <span className="shrink-0">-{formatMoney(order.discount_amount)}</span>
                                    </div>
                                )}
                                <div className="flex justify-between gap-3">
                                    <span className="text-[var(--brand-muted)]">{t.success.shipping}</span>
                                    <span className="shrink-0">
                                        {Number(order.shipping_charge) > 0 ? formatMoney(order.shipping_charge) : 'Free'}
                                    </span>
                                </div>
                                <div className="flex items-baseline justify-between gap-3 border-t border-[var(--brand-line)] pt-4">
                                    <span className="font-semibold">{t.success.total}</span>
                                    <span className="font-display text-2xl text-[var(--brand-ink)] sm:text-3xl">
                                        {formatMoney(order.total_amount)}
                                    </span>
                                </div>
                            </div>

                            {/* Action buttons */}
                            <div className="mt-5 grid gap-3">
                                <Link
                                    href="/products"
                                    className="flex h-12 w-full items-center justify-center gap-2 bg-[var(--brand-slate)] px-5 text-sm font-semibold text-[var(--brand-ivory)] transition hover:bg-[var(--brand-ink)]"
                                >
                                    <ShoppingBag size={16} />
                                    {t.success.continueShopping}
                                </Link>
                                <Link
                                    href="/"
                                    className="flex h-12 w-full items-center justify-center gap-2 border border-[var(--brand-line)] bg-white px-5 text-sm font-semibold text-[var(--brand-ink)] transition hover:border-[var(--brand-gold)]"
                                >
                                    <Home size={16} />
                                    {t.success.backToHome}
                                </Link>
                            </div>
                        </section>

                        {/* Support */}
                        <section className="border border-[var(--brand-line)] bg-white p-5">
                            <p className="eyebrow text-[var(--brand-gold-dim)]">Support</p>
                            <Link
                                href="/about"
                                className="mt-4 flex items-center justify-between gap-3 text-sm font-medium text-[var(--brand-ink)]"
                            >
                                <span className="flex items-center gap-2">
                                    <Phone size={15} className="text-[var(--brand-gold)]" />
                                    Contact support
                                </span>
                                <ChevronRight size={15} className="shrink-0 text-[var(--brand-muted)]" />
                            </Link>
                        </section>
                    </aside>
                </main>
            </div>
        </FrontendLayout>
    );
}
