import { Head } from "@inertiajs/react";
import AppLayout from "@/layouts/app-layout";
import {
    Card,
    CardContent,
    CardHeader,
    CardTitle,
    CardDescription,
} from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import { StatChip } from "@/components/crm/global-card";
import {
    Table,
    TableBody,
    TableCell,
    TableHead,
    TableHeader,
    TableRow,
} from "@/components/ui/table";
import {
    Building2,
    CheckCircle2,
    Clock,
    AlertTriangle,
    BadgePercent,
    CreditCard,
    ArrowUpRight,
    Users,
    Package,
    ArrowRight,
    Sparkles,
} from "lucide-react";

type Plan = {
    id: number;
    name: string;
    slug: string;
    monthly_price: number;
    companies_count: number;
};
type Expiry = {
    id: number;
    nama: string;
    kode_perusahaan: string;
    subscription_status: string;
    subscription_expires_at: string;
    subscription_plan?: { name: string };
};
type Invoice = {
    id: number;
    invoice_number: string;
    amount: number;
    status: string;
    issued_at: string;
    paid_at: string | null;
    perusahaan?: { nama: string; kode_perusahaan: string };
    subscription_plan?: { name: string };
};
type Upgrade = {
    id: number;
    nama: string;
    kode_perusahaan: string;
    requested_plan: string;
    requested_at: string | null;
};

type Props = {
    metrics: Record<string, number>;
    plans: Plan[];
    upcomingExpiry: Expiry[];
    recentInvoices: Invoice[];
    upgradeRequests: Upgrade[];
};

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

const date = (value: string | null) =>
    value
        ? new Intl.DateTimeFormat("id-ID", { dateStyle: "medium" }).format(
              new Date(value),
          )
        : "-";

export default function PlatformDashboard({
    metrics,
    plans,
    upcomingExpiry,
    recentInvoices,
    upgradeRequests,
}: Props) {
    return (
        <AppLayout
            breadcrumbs={[
                { title: "Platform Dashboard", href: "/platform/dashboard" },
            ]}
        >
            <Head title="Platform Dashboard" />
            <div className="crm-page space-y-6 pb-10">
                {/* Header Section */}
                <div className="flex flex-col gap-4 md:flex-row md:items-center md:justify-between">
                    <div>
                        <div className="flex items-center gap-2">
                            <span className="flex h-2 w-2 rounded-full bg-emerald-500 animate-pulse" />
                            <span className="text-xs font-bold uppercase tracking-wider text-indigo-600 dark:text-indigo-400">
                                SaaS Administration
                            </span>
                        </div>
                        <h1 className="text-2xl font-extrabold tracking-tight text-slate-900 dark:text-slate-50 sm:text-3xl">
                            Platform Dashboard
                        </h1>
                        <p className="text-xs text-slate-500 dark:text-slate-400 mt-1">
                            Ringkasan seluruh tenant, metrik performa, dan
                            pendapatan berlangganan SaaS secara real-time.
                        </p>
                    </div>
                    <Button
                        asChild
                        className="rounded-xl shadow-sm bg-indigo-600 hover:bg-indigo-700 text-white font-semibold"
                    >
                        <a
                            href="/platform/companies"
                            className="flex items-center gap-2"
                        >
                            Kelola Companies <ArrowRight className="size-4" />
                        </a>
                    </Button>
                </div>

                {/* Metrics Grid using StatChip */}
                <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
                    <StatChip
                        icon={Building2}
                        label="Total Companies"
                        value={metrics.total_companies}
                        tone="blue"
                        variant="compact"
                        description="Keseluruhan tenant terdaftar"
                    />
                    <StatChip
                        icon={CheckCircle2}
                        label="Active Companies"
                        value={metrics.active_companies}
                        tone="emerald"
                        variant="compact"
                        description="Tenant dengan status aktif"
                    />
                    <StatChip
                        icon={Sparkles}
                        label="Trial Companies"
                        value={metrics.trial_companies}
                        tone="violet"
                        variant="compact"
                        description="Masa uji coba berjalan"
                    />
                    <StatChip
                        icon={AlertTriangle}
                        label="Suspended"
                        value={metrics.suspended_companies}
                        tone="rose"
                        variant="compact"
                        description="Tenant ditangguhkan"
                    />
                    <StatChip
                        icon={BadgePercent}
                        label="MRR"
                        value={money(metrics.mrr)}
                        tone="emerald"
                        variant="compact"
                        description="Recurring revenue paket aktif"
                    />
                    <StatChip
                        icon={CreditCard}
                        label="Paid Bulan Ini"
                        value={money(metrics.paid_this_month)}
                        tone="blue"
                        variant="compact"
                        description="Pendapatan lunas periode ini"
                    />
                    <StatChip
                        icon={Clock}
                        label="Past Due"
                        value={metrics.past_due_companies}
                        tone="orange"
                        variant="compact"
                        description="Menunggu pelunasan tagihan"
                    />
                    <StatChip
                        icon={ArrowUpRight}
                        label="Upgrade Request"
                        value={metrics.upgrade_requests}
                        tone="rose"
                        variant="compact"
                        description="Permintaan kenaikan paket"
                    />
                </div>

                {/* Distribution & Expiry Section */}
                <div className="grid gap-6 lg:grid-cols-2">
                    <Card className="rounded-2xl border-slate-200/80 bg-white shadow-2xs dark:border-slate-800 dark:bg-slate-900">
                        <CardHeader className="pb-3">
                            <CardTitle className="text-base font-bold text-slate-900 dark:text-slate-100">
                                Distribusi Paket
                            </CardTitle>
                            <CardDescription className="text-xs">
                                Persebaran jumlah tenant berdasarkan paket
                                langganan
                            </CardDescription>
                        </CardHeader>
                        <CardContent className="space-y-3">
                            {plans.map((plan) => (
                                <div
                                    key={plan.id}
                                    className="flex items-center justify-between rounded-xl border border-slate-100 bg-slate-50/50 p-3.5 transition hover:bg-slate-50 dark:border-slate-800 dark:bg-slate-800/40"
                                >
                                    <div>
                                        <div className="font-bold text-slate-900 dark:text-slate-100 text-sm">
                                            {plan.name}
                                        </div>
                                        <div className="text-xs text-slate-500 dark:text-slate-400 mt-0.5">
                                            {money(Number(plan.monthly_price))}{" "}
                                            / bulan
                                        </div>
                                    </div>
                                    <div className="text-lg font-extrabold text-indigo-600 dark:text-indigo-400">
                                        {plan.companies_count}{" "}
                                        <span className="text-xs font-normal text-slate-400">
                                            tenant
                                        </span>
                                    </div>
                                </div>
                            ))}
                        </CardContent>
                    </Card>

                    <Card className="rounded-2xl border-slate-200/80 bg-white shadow-2xs dark:border-slate-800 dark:bg-slate-900">
                        <CardHeader className="pb-3">
                            <CardTitle className="text-base font-bold text-slate-900 dark:text-slate-100">
                                Subscription Akan Expired
                            </CardTitle>
                            <CardDescription className="text-xs">
                                Daftar tenant yang masa aktifnya habis dalam 30
                                hari
                            </CardDescription>
                        </CardHeader>
                        <CardContent>
                            {upcomingExpiry.length === 0 ? (
                                <div className="flex h-40 items-center justify-center text-xs text-slate-400">
                                    Tidak ada subscription yang expired dalam 30
                                    hari.
                                </div>
                            ) : (
                                <div className="space-y-3 max-h-65 overflow-y-auto pr-1">
                                    {upcomingExpiry.map((c) => (
                                        <div
                                            key={c.id}
                                            className="flex items-center justify-between rounded-xl border border-slate-100 bg-slate-50/50 p-3.5 transition hover:bg-slate-50 dark:border-slate-800 dark:bg-slate-800/40"
                                        >
                                            <div>
                                                <div className="font-bold text-slate-900 dark:text-slate-100 text-sm">
                                                    {c.nama}
                                                </div>
                                                <div className="text-xs text-slate-500 dark:text-slate-400 mt-0.5 flex items-center gap-1.5">
                                                    <span>
                                                        {c.subscription_plan
                                                            ?.name ?? "-"}
                                                    </span>
                                                    <span>·</span>
                                                    <Badge
                                                        variant="outline"
                                                        className="text-[10px] px-1.5 py-0"
                                                    >
                                                        {c.subscription_status}
                                                    </Badge>
                                                </div>
                                            </div>
                                            <div className="text-xs font-semibold text-rose-600 dark:text-rose-400">
                                                {date(
                                                    c.subscription_expires_at,
                                                )}
                                            </div>
                                        </div>
                                    ))}
                                </div>
                            )}
                        </CardContent>
                    </Card>
                </div>

                {/* Upgrade Requests & Platform Data */}
                <div className="grid gap-6 lg:grid-cols-2">
                    <Card className="rounded-2xl border-slate-200/80 bg-white shadow-2xs dark:border-slate-800 dark:bg-slate-900">
                        <CardHeader className="pb-3">
                            <CardTitle className="text-base font-bold text-slate-900 dark:text-slate-100">
                                Upgrade Request
                            </CardTitle>
                            <CardDescription className="text-xs">
                                Permintaan peningkatan paket dari tenant
                            </CardDescription>
                        </CardHeader>
                        <CardContent>
                            {upgradeRequests.length === 0 ? (
                                <div className="flex h-40 items-center justify-center text-xs text-slate-400">
                                    Belum ada permintaan upgrade.
                                </div>
                            ) : (
                                <div className="space-y-3 max-h-65 overflow-y-auto pr-1">
                                    {upgradeRequests.map((item) => (
                                        <div
                                            key={item.id}
                                            className="rounded-xl border border-slate-100 bg-slate-50/50 p-3.5 dark:border-slate-800 dark:bg-slate-800/40"
                                        >
                                            <div className="flex justify-between items-start gap-3">
                                                <div>
                                                    <div className="font-bold text-slate-900 dark:text-slate-100 text-sm">
                                                        {item.nama}
                                                    </div>
                                                    <div className="text-xs font-mono text-slate-400 mt-0.5">
                                                        {item.kode_perusahaan}
                                                    </div>
                                                </div>
                                                <Badge className="bg-indigo-50 text-indigo-600 dark:bg-indigo-950/50 dark:text-indigo-400 text-xs font-bold border-0">
                                                    {item.requested_plan}
                                                </Badge>
                                            </div>
                                            <div className="mt-2 text-xs text-slate-400">
                                                Diminta pada:{" "}
                                                {date(item.requested_at)}
                                            </div>
                                        </div>
                                    ))}
                                </div>
                            )}
                        </CardContent>
                    </Card>

                    <Card className="rounded-2xl border-slate-200/80 bg-white shadow-2xs dark:border-slate-800 dark:bg-slate-900">
                        <CardHeader className="pb-3">
                            <CardTitle className="text-base font-bold text-slate-900 dark:text-slate-100">
                                Data Platform Keseluruhan
                            </CardTitle>
                            <CardDescription className="text-xs">
                                Akumulasi entitas aktif dalam ekosistem
                            </CardDescription>
                        </CardHeader>
                        <CardContent className="grid grid-cols-3 gap-4 text-center pt-2">
                            <div className="rounded-2xl border border-slate-100 bg-slate-50/60 p-5 dark:border-slate-800 dark:bg-slate-800/50">
                                <Users className="mx-auto size-5 text-indigo-500 mb-2" />
                                <div className="text-2xl font-extrabold text-slate-900 dark:text-slate-100">
                                    {metrics.total_users ?? 0}
                                </div>
                                <div className="text-xs font-medium text-slate-500 dark:text-slate-400 mt-1">
                                    Users
                                </div>
                            </div>
                            <div className="rounded-2xl border border-slate-100 bg-slate-50/60 p-5 dark:border-slate-800 dark:bg-slate-800/50">
                                <Building2 className="mx-auto size-5 text-emerald-500 mb-2" />
                                <div className="text-2xl font-extrabold text-slate-900 dark:text-slate-100">
                                    {metrics.total_customers ?? 0}
                                </div>
                                <div className="text-xs font-medium text-slate-500 dark:text-slate-400 mt-1">
                                    Customers
                                </div>
                            </div>
                            <div className="rounded-2xl border border-slate-100 bg-slate-50/60 p-5 dark:border-slate-800 dark:bg-slate-800/50">
                                <Package className="mx-auto size-5 text-amber-500 mb-2" />
                                <div className="text-2xl font-extrabold text-slate-900 dark:text-slate-100">
                                    {metrics.total_products ?? 0}
                                </div>
                                <div className="text-xs font-medium text-slate-500 dark:text-slate-400 mt-1">
                                    Products
                                </div>
                            </div>
                        </CardContent>
                    </Card>
                </div>

                {/* Recent Subscription Invoices Table */}
                <Card className="rounded-2xl border-slate-200/80 bg-white shadow-2xs dark:border-slate-800 dark:bg-slate-900">
                    <CardHeader className="pb-4">
                        <CardTitle className="text-base font-bold text-slate-900 dark:text-slate-100">
                            Invoice Subscription Terbaru
                        </CardTitle>
                        <CardDescription className="text-xs">
                            Riwayat transaksi tagihan langganan tenant platform
                        </CardDescription>
                    </CardHeader>
                    <CardContent className="px-0 pb-0">
                        <div className="overflow-x-auto">
                            <Table className="w-full text-xs">
                                <TableHeader className="border-y border-slate-100 bg-slate-50/50 text-slate-500 dark:border-slate-800 dark:bg-slate-800/50 dark:text-slate-400">
                                    <TableRow>
                                        <TableHead className="px-5 py-3 font-semibold">
                                            Invoice
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold">
                                            Company
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold">
                                            Plan
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold text-right">
                                            Amount
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold text-center">
                                            Status
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold">
                                            Paid At
                                        </TableHead>
                                    </TableRow>
                                </TableHeader>
                                <TableBody className="divide-y divide-slate-100 dark:divide-slate-800">
                                    {recentInvoices.map((invoice) => (
                                        <TableRow
                                            key={invoice.id}
                                            className="transition hover:bg-slate-50/50 dark:hover:bg-slate-800/50"
                                        >
                                            <TableCell className="px-5 py-3.5 font-mono font-bold text-slate-900 dark:text-slate-100">
                                                {invoice.invoice_number}
                                            </TableCell>
                                            <TableCell className="px-5 py-3.5 font-medium text-slate-700 dark:text-slate-300">
                                                {invoice.perusahaan?.nama ??
                                                    "-"}
                                            </TableCell>
                                            <TableCell className="px-5 py-3.5 text-slate-500 dark:text-slate-400">
                                                {invoice.subscription_plan
                                                    ?.name ?? "-"}
                                            </TableCell>
                                            <TableCell className="px-5 py-3.5 text-right font-bold text-slate-900 dark:text-slate-100">
                                                {money(Number(invoice.amount))}
                                            </TableCell>
                                            <TableCell className="px-5 py-3.5 text-center">
                                                <Badge
                                                    variant="outline"
                                                    className="rounded-lg px-2 py-0.5 text-[10px] font-bold bg-emerald-50 text-emerald-600 dark:bg-emerald-950/50 dark:text-emerald-400 border-0"
                                                >
                                                    {invoice.status}
                                                </Badge>
                                            </TableCell>
                                            <TableCell className="px-5 py-3.5 text-slate-400">
                                                {date(invoice.paid_at)}
                                            </TableCell>
                                        </TableRow>
                                    ))}
                                    {recentInvoices.length === 0 && (
                                        <TableRow>
                                            <TableCell
                                                colSpan={6}
                                                className="py-10 text-center text-slate-400"
                                            >
                                                Belum ada invoice subscription.
                                            </TableCell>
                                        </TableRow>
                                    )}
                                </TableBody>
                            </Table>
                        </div>
                    </CardContent>
                </Card>
            </div>
        </AppLayout>
    );
}
