import QRCode from "qrcode"; import Link from "next/link"; import { and, eq } from "drizzle-orm"; import { notFound, redirect } from "next/navigation"; import { connection } from "next/server"; import { getDb } from "@/db"; import { commissionCheckouts, commissionTickets } from "@/db/schema"; import { CommissionPaymentForm } from "@/components/commission/payment-form"; import { CommissionRequestSummary } from "@/components/commission/request-summary"; import { SiteHeader } from "@/components/public/site-header"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { getCustomerSession } from "@/lib/auth/server"; import { promptPayConfig } from "@/lib/commission/payment"; import { generatePromptPayPayload } from "@/lib/commission/promptpay"; import { getCommissionLabels } from "@/lib/commission/catalog"; import { checkoutExpiresAt, checkoutNow } from "@/lib/commission/checkout-expiration"; export const instant = false; export default async function CommissionPayPage({ params }: PageProps<"/commission/pay/[id]">) { await connection(); const { id } = await params; const session = await getCustomerSession(); if (!session) redirect(`/auth/login?next=${encodeURIComponent(`/commission/pay/${id}`)}`); const [checkout] = await getDb().select().from(commissionCheckouts) .where(and(eq(commissionCheckouts.id, id), eq(commissionCheckouts.userId, session.user.id))).limit(1); if (!checkout) notFound(); const [ticket] = await getDb().select({ id: commissionTickets.id }).from(commissionTickets) .where(eq(commissionTickets.checkoutId, id)).limit(1); if (ticket) redirect(`/commission/tickets/${ticket.id}`); const expiresAt = checkoutExpiresAt(checkout.createdAt); const serverNow = checkoutNow(); let qr: string | null = null; if (serverNow < expiresAt) { const { identifier } = promptPayConfig(); const payload = generatePromptPayPayload({ identifier, amount: checkout.amountBaht }); qr = await QRCode.toDataURL(payload, { margin: 2, width: 300 }); } const catalog = await getCommissionLabels(checkout.request); return