import { notFound, redirect } from "next/navigation";
import { prisma } from "@/lib/prisma";
import { ensureInvoiceNumber } from "@/lib/actions/invoice";
import InvoiceDocument from "@/components/InvoiceDocument";

export default async function CustomerOrderInvoicePage({
  params,
  searchParams,
}: {
  params: Promise<{ orderNumber: string }>;
  searchParams: Promise<{ email?: string }>;
}) {
  const { orderNumber } = await params;
  const { email } = await searchParams;

  const order = await prisma.order.findUnique({
    where: { orderNumber },
    include: { items: { include: { product: true, variant: true } } },
  });
  if (!order) notFound();
  if (!email || email.trim().toLowerCase() !== order.email.toLowerCase()) {
    redirect(`/track-order?orderNumber=${encodeURIComponent(orderNumber)}`);
  }
  if (order.status !== "paid") {
    redirect(`/order/${orderNumber}?email=${encodeURIComponent(email)}`);
  }

  const invoiceNumber = await ensureInvoiceNumber(order.id);
  const [company, tax] = await Promise.all([prisma.companyDetails.findFirst(), prisma.taxSettings.findFirst()]);

  return <InvoiceDocument order={order} invoiceNumber={invoiceNumber} company={company} tax={tax} />;
}
