import { ShellPage } from "@/components/page-templates"; import { Button, SectionCard } from "@/components/ui"; import { createTenant } from "@/lib/admin-crud"; import { getSession } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import { redirect } from "next/navigation"; export default async function NewTenantPage({ searchParams }: { searchParams?: Promise<{ error?: string }>; }) { const session = await getSession(); if (!session || session.role !== "super_admin") { redirect("/unauthorized"); } const params = await (searchParams ?? Promise.resolve({ error: undefined })); let plans: Array<{ id: string; name: string; code: string; priceMonthly: number; }> = []; try { plans = await prisma.subscriptionPlan.findMany({ orderBy: { priceMonthly: "asc" } }); } catch (error) { console.error("[tenant/new] load plans failed", { actorUserId: session.userId, error: error instanceof Error ? error.message : String(error) }); } const error = params.error; const errorMessage = error === "missing_fields" ? "Nama perusahaan, slug, timezone, dan plan wajib diisi." : error === "invalid_plan" ? "Plan tidak valid." : error === "slug_exists" ? "Slug tenant sudah dipakai." : error === "admin_email_exists" ? "Email admin awal sudah terpakai." : error === "tenant_creation_failed" ? "Tidak bisa membuat tenant, silakan cek log server untuk detail error." : error === "plans_fetch_failed" ? "Tidak dapat memuat daftar plan. Cek log server/DB koneksi." : null; return (
{errorMessage ?

{errorMessage}

: null} {plans.length === 0 ? (

Belum ada data plan. Isi dulu plan pada Catalog Plan sebelum membuat tenant.

) : null}
); }