import { Head, router } from "@inertiajs/react";
import {
    ArrowRight,
    Check,
    CheckCircle2,
    Crown,
    Gauge,
    Sparkles,
    Users,
    Package,
    ShoppingCart,
    MapPinned,
} from "lucide-react";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import AppLayout from "@/layouts/app-layout";
import { StatChip } from "@/components/crm/global-card";

type Plan = {
    id: number;
    name: string;
    slug: string;
    monthly_price: string | number;
    max_users: number | null;
    max_customers: number | null;
    max_products: number | null;
    max_orders_monthly: number | null;
    max_visits_monthly: number | null;
    features: string[] | null;
};

type Props = {
    company: any;
    plans: Plan[];
    usage: {
        users: number;
        customers: number;
        products: number;
        orders_monthly: number;
        visits_monthly: number;
    };
    limits: {
        users: number | null;
        customers: number | null;
        products: number | null;
        orders_monthly: number | null;
        visits_monthly: number | null;
    };
    remaining: {
        users: number | null;
        customers: number | null;
        products: number | null;
        orders_monthly: number | null;
        visits_monthly: number | null;
    };
    flash?: { error?: string; success?: string };
};

const money = (v: string | number) =>
    new Intl.NumberFormat("id-ID", {
        style: "currency",
        currency: "IDR",
        maximumFractionDigits: 0,
    }).format(Number(v));

const labels = {
    users: { label: "Users", icon: Users },
    customers: { label: "Customer", icon: Users },
    products: { label: "Produk", icon: Package },
    orders_monthly: { label: "Order / Bulan", icon: ShoppingCart },
    visits_monthly: { label: "Kunjungan / Bulan", icon: MapPinned },
} as const;

export default function Subscription({
    company,
    plans,
    usage,
    limits,
    remaining,
    flash,
}: Props) {
    const current = company.subscription_plan;
    const request = (id: number) =>
        router.post("/crm/subscription/request-upgrade", { plan_id: id });

    return (
        <AppLayout
            breadcrumbs={[{ title: "Subscription", href: "/crm/subscription" }]}
        >
            <Head title="Subscription & Billing" />

            <div className="crm-page space-y-6 pb-10">
                {/* Hero Section */}
                <section className="relative overflow-hidden rounded-3xl bg-slate-950 text-white shadow-[0_20px_50px_rgba(15,23,42,0.2)] border border-slate-800/80">
                    <div className="absolute -right-24 -top-32 size-96 rounded-full bg-indigo-600/30 blur-3xl pointer-events-none" />
                    <div className="absolute -bottom-32 left-1/3 size-80 rounded-full bg-cyan-500/15 blur-3xl pointer-events-none" />

                    <div className="relative grid gap-8 p-8 md:p-10 lg:grid-cols-[1.2fr_.8fr] lg:items-center">
                        <div>
                            <div className="mb-4 inline-flex items-center gap-2 rounded-full border border-indigo-500/30 bg-indigo-500/10 px-3 py-1.5 text-xs font-bold text-indigo-300 backdrop-blur">
                                <Sparkles className="size-3.5 text-indigo-400" />
                                Enterprise Subscription & Growth Hub
                            </div>
                            <h1 className="max-w-2xl text-3xl font-black tracking-tight md:text-4xl lg:text-[2.65rem] leading-[1.15]">
                                Pilih paket yang mengikuti pertumbuhan bisnis
                                Anda.
                            </h1>
                            <p className="mt-3 max-w-2xl text-sm leading-relaxed text-muted-foreground/60 md:text-base">
                                Mulai dari kebutuhan operasional saat ini, lalu
                                tingkatkan kapasitas secara seamless ketika tim,
                                customer, produk, dan aktivitas penjualan Anda
                                berkembang pesat.
                            </p>
                        </div>

                        <div className="rounded-2xl border border-white/10 bg-card/[0.07] p-6 backdrop-blur-xl shadow-inner">
                            <div className="flex items-center gap-4">
                                <div className="grid size-12 place-items-center rounded-2xl bg-linear-to-br from-indigo-500 to-violet-600 text-white shadow-md shadow-indigo-500/20">
                                    <Crown className="size-6" />
                                </div>
                                <div>
                                    <div className="text-xs font-semibold text-indigo-200/80 uppercase tracking-wider">
                                        Paket Aktif Saat Ini
                                    </div>
                                    <div className="text-xl font-black tracking-tight mt-0.5">
                                        {current?.name ?? "Belum dipilih"}
                                    </div>
                                </div>
                            </div>
                            <div className="mt-6 grid grid-cols-2 gap-3 pt-4 border-t border-white/10">
                                <div className="rounded-xl bg-black/30 p-3.5 border border-white/5">
                                    <div className="text-[10px] uppercase font-bold tracking-wider text-muted-foreground/80">
                                        Status Langganan
                                    </div>
                                    <div className="mt-1 text-xs font-extrabold capitalize text-emerald-400 flex items-center gap-1.5">
                                        <span className="size-2 rounded-full bg-emerald-500 animate-pulse" />
                                        {company.subscription_status ?? "-"}
                                    </div>
                                </div>
                                <div className="rounded-xl bg-black/30 p-3.5 border border-white/5">
                                    <div className="text-[10px] uppercase font-bold tracking-wider text-muted-foreground/80">
                                        Masa Berlaku
                                    </div>
                                    <div className="mt-1 text-xs font-extrabold text-slate-200">
                                        {company.subscription_expires_at ?? "-"}
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </section>

                {/* Flash Messages */}
                {flash?.error && (
                    <div className="flex items-center gap-3 rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3.5 text-xs font-bold text-rose-800 dark:border-rose-900/50 dark:bg-rose-950/30 dark:text-rose-300 shadow-sm">
                        <span className="size-2 shrink-0 rounded-full bg-rose-500" />
                        {flash.error}
                    </div>
                )}
                {flash?.success && (
                    <div className="flex items-center gap-3 rounded-2xl border border-emerald-200 bg-emerald-50 px-4 py-3.5 text-xs font-bold text-emerald-800 dark:border-emerald-900/50 dark:bg-emerald-950/30 dark:text-emerald-300 shadow-sm">
                        <CheckCircle2 className="size-4 shrink-0 text-emerald-600" />
                        {flash.success}
                    </div>
                )}

                {/* Usage Section menggunakan global-card (StatChip) */}
                <section className="space-y-4">
                    <div className="flex flex-col sm:flex-row sm:items-end justify-between gap-4">
                        <div>
                            <div className="flex items-center gap-1.5 mb-1">
                                <span className="h-2 w-2 rounded-full bg-indigo-500" />
                                <span className="text-xs font-bold uppercase tracking-wider text-indigo-600 dark:text-indigo-400">
                                    Usage Overview
                                </span>
                            </div>
                            <h2 className="text-xl font-extrabold tracking-tight text-foreground dark:text-slate-50">
                                Pemakaian Paket & Resource
                            </h2>
                            <p className="text-xs text-muted-foreground dark:text-muted-foreground/80 mt-0.5">
                                Pantau batas kapasitas kuota Anda secara
                                real-time sebelum memilih peningkatan paket
                                berikutnya.
                            </p>
                        </div>
                        <div className="hidden items-center gap-2 text-xs font-bold text-indigo-600 bg-indigo-50 dark:bg-indigo-950/50 px-3 py-1.5 rounded-xl self-start sm:self-auto border border-indigo-100 dark:border-indigo-900/50">
                            <Gauge
                                className="size-4 animate-spin"
                                style={{ animationDuration: "6s" }}
                            />
                            Real-time monitoring
                        </div>
                    </div>

                    <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-5">
                        {(
                            Object.keys(labels) as Array<keyof typeof labels>
                        ).map((key) => {
                            const limit = limits[key];
                            const used = usage[key];
                            const percent =
                                limit === null
                                    ? 0
                                    : Math.min(
                                          100,
                                          limit
                                              ? Math.round((used / limit) * 100)
                                              : 100,
                                      );
                            const Icon = labels[key].icon;
                            const isHigh = percent >= 80;

                            return (
                                <StatChip
                                    key={key}
                                    label={labels[key].label}
                                    value={`${used} / ${limit ?? "∞"}`}
                                    icon={Icon}
                                    tone={isHigh ? "orange" : "emerald"}
                                    description={`Sisa: ${remaining[key] ?? "Unlimited"}`}
                                    variant="compact"
                                />
                            );
                        })}
                    </div>
                </section>

                {/* Plans Selection Section */}
                <section className="space-y-6 pt-4">
                    <div className="mx-auto max-w-2xl text-center">
                        <div className="inline-block text-xs font-bold uppercase tracking-widest text-indigo-600 dark:text-indigo-400 mb-1">
                            Pilihan Tier Paket
                        </div>
                        <h2 className="text-2xl font-black tracking-tight text-slate-950 dark:text-slate-50 md:text-3xl">
                            Lebih banyak kapasitas, ruang ekspansi tak terbatas.
                        </h2>
                        <p className="mt-2 text-xs md:text-sm text-muted-foreground dark:text-muted-foreground/80 leading-relaxed">
                            Bandingkan spesifikasi dan fitur unggulan setiap
                            paket. Anda dapat langsung mengajukan peningkatan
                            plan untuk mengoptimalkan kinerja bisnis Anda.
                        </p>
                    </div>

                    <div className="grid gap-6 md:grid-cols-2 xl:grid-cols-4 pt-2">
                        {plans.map((p) => {
                            const active = current?.id === p.id;
                            return (
                                <Card
                                    key={p.id}
                                    className={`relative flex h-full flex-col overflow-hidden rounded-3xl transition-all duration-300 hover:shadow-xl bg-card dark:bg-slate-900 ${
                                        active
                                            ? "border-2 border-indigo-600 shadow-[0_18px_45px_rgba(79,70,229,0.15)] dark:border-indigo-500"
                                            : "border border-border/80 shadow-[0_8px_30px_rgba(15,23,42,0.04)] dark:border-slate-800"
                                    }`}
                                >
                                    <CardHeader className="p-6 pb-4 bg-muted/50/50 dark:bg-slate-800/40 border-b border-slate-100 dark:border-slate-800">
                                        <div className="flex items-start justify-between gap-4">
                                            <div>
                                                <div className="text-[10px] font-extrabold uppercase tracking-[0.14em] text-indigo-600 dark:text-indigo-400">
                                                    SaaS Plan
                                                </div>
                                                <CardTitle className="mt-1 text-xl font-black tracking-tight text-foreground dark:text-slate-100">
                                                    {p.name}
                                                </CardTitle>
                                            </div>
                                            <div className="grid size-10 place-items-center rounded-2xl bg-indigo-50 dark:bg-indigo-950/50 text-indigo-600 dark:text-indigo-400 border border-indigo-100 dark:border-indigo-900/50">
                                                <Crown className="size-4" />
                                            </div>
                                        </div>
                                        <div className="mt-5 flex items-baseline gap-1">
                                            <span className="text-2xl font-black tracking-tight text-slate-950 dark:text-slate-50">
                                                {money(p.monthly_price)}
                                            </span>
                                            <span className="text-xs font-medium text-muted-foreground/80">
                                                / bulan
                                            </span>
                                        </div>
                                    </CardHeader>

                                    <CardContent className="flex flex-1 flex-col p-6 justify-between space-y-6">
                                        <div className="space-y-4">
                                            {/* Limits List */}
                                            <div className="space-y-2.5 border-b border-slate-100 dark:border-slate-800 pb-5 text-xs">
                                                <p className="font-bold text-foreground/80 dark:text-muted-foreground/60 uppercase tracking-wider text-[10px] mb-2">
                                                    Batas Resource
                                                </p>
                                                {[
                                                    ["Users", p.max_users],
                                                    [
                                                        "Customer",
                                                        p.max_customers,
                                                    ],
                                                    ["Produk", p.max_products],
                                                    [
                                                        "Order / bulan",
                                                        p.max_orders_monthly,
                                                    ],
                                                    [
                                                        "Kunjungan / bulan",
                                                        p.max_visits_monthly,
                                                    ],
                                                ].map(([label, value]) => (
                                                    <div
                                                        key={String(label)}
                                                        className="flex items-center justify-between gap-3 py-0.5"
                                                    >
                                                        <span className="text-muted-foreground dark:text-muted-foreground/80 font-medium">
                                                            {label}
                                                        </span>
                                                        <span className="font-bold text-foreground dark:text-slate-100">
                                                            {value ??
                                                                "Unlimited"}
                                                        </span>
                                                    </div>
                                                ))}
                                            </div>

                                            {/* Features List */}
                                            {p.features &&
                                                p.features.length > 0 && (
                                                    <div>
                                                        <div className="mb-2.5 text-[10px] font-bold uppercase tracking-wider text-foreground/80 dark:text-muted-foreground/60">
                                                            Fitur Termasuk
                                                        </div>
                                                        <div className="space-y-2">
                                                            {p.features.map(
                                                                (feature) => (
                                                                    <div
                                                                        key={
                                                                            feature
                                                                        }
                                                                        className="flex items-start gap-2.5 text-xs text-muted-foreground dark:text-muted-foreground/80"
                                                                    >
                                                                        <span className="mt-0.5 grid size-4 shrink-0 place-items-center rounded-full bg-emerald-50 dark:bg-emerald-950/50 text-emerald-600 dark:text-emerald-400 border border-emerald-100 dark:border-emerald-900">
                                                                            <Check className="size-2.5" />
                                                                        </span>
                                                                        <span className="font-medium">
                                                                            {
                                                                                feature
                                                                            }
                                                                        </span>
                                                                    </div>
                                                                ),
                                                            )}
                                                        </div>
                                                    </div>
                                                )}
                                        </div>

                                        <Button
                                            className={`h-11 w-full rounded-xl font-bold text-xs transition-all ${
                                                active
                                                    ? "bg-linear-to-r from-indigo-600 to-violet-600 px-4 py-2 text-xs font-bold text-white shadow-sm"
                                                    : "bg-slate-950 text-white shadow-md shadow-slate-950/10 hover:bg-indigo-600 dark:bg-slate-800 dark:hover:bg-indigo-600"
                                            }`}
                                            disabled={active}
                                            onClick={() => request(p.id)}
                                        >
                                            {active ? (
                                                <>
                                                    <CheckCircle2 className="size-3.5" />
                                                    Paket Saat Ini
                                                </>
                                            ) : (
                                                <>
                                                    Ajukan Upgrade Paket
                                                    <ArrowRight className="ml-2 size-4" />
                                                </>
                                            )}
                                        </Button>
                                    </CardContent>
                                </Card>
                            );
                        })}
                    </div>
                </section>
            </div>
        </AppLayout>
    );
}
