import Link from "next/link"; import { ShellPage } from "@/components/page-templates"; import { Badge, SectionCard } from "@/components/ui"; import { getSession } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import { redirect } from "next/navigation"; function formatDate(value: Date | null) { if (!value) { return "-"; } return new Intl.DateTimeFormat("id-ID", { day: "2-digit", month: "short", year: "numeric", hour: "2-digit", minute: "2-digit" }).format(value); } function formatMoney(value: number) { return new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", maximumFractionDigits: 0 }).format(value); } function statusTone(status: string) { if (status === "PAID") { return "success"; } if (status === "OVERDUE") { return "danger"; } return "warning"; } export default async function SuperAdminInvoiceDetailPage({ params }: { params: Promise<{ invoiceId: string }>; }) { const session = await getSession(); if (!session || session.role !== "super_admin") { redirect("/unauthorized"); } const { invoiceId } = await params; const invoice = await prisma.billingInvoice.findUnique({ where: { id: invoiceId }, include: { tenant: { select: { name: true, slug: true } }, plan: { select: { name: true, code: true } } } }); if (!invoice) { redirect("/super-admin/billing/invoices?error=invoice_not_found"); } return (

Invoice: {invoice.invoiceNumber}

Tenant:{" "} {invoice.tenant.name} ({invoice.tenant.slug})

Plan: {invoice.plan.name} ({invoice.plan.code})

Period: {formatDate(invoice.periodStart)} - {formatDate(invoice.periodEnd)}

Total amount: {formatMoney(invoice.totalAmount)}

Subtotal: {formatMoney(invoice.subtotal)} | Tax: {formatMoney(invoice.taxAmount)}

Status: {invoice.paymentStatus}

Issued: {formatDate(invoice.createdAt)}

Due date: {formatDate(invoice.dueDate)}

Paid at: {formatDate(invoice.paidAt)}

Updated: {formatDate(invoice.updatedAt)}

); }