import { Suspense } from "react";

import { AccessDeniedView } from "@/app/customer/_components/access-denied-view";
import { customerPageAllows } from "@/app/customer/_lib/customer-page-guard";
import type { CustomerRouteKey } from "@/config/customer-route-keys";
import { CUSTOMER_ROUTE_KEYS } from "@/config/customer-route-keys";
import { StockFormRoutePage } from "@/components/form/transaction-workspace/stock-form-route-page";

type PageProps = {
  params: Promise<{ tenant: string }>;
  searchParams: Promise<{ child?: string; id?: string }>;
};

function resolveStockFormGuard(child: string, id: string): {
  routeKey: CustomerRouteKey;
  label: string;
} {
  switch (child) {
    case "sale":
      return { routeKey: CUSTOMER_ROUTE_KEYS.stockSaleCreate, label: "Sale" };
    case "option":
      return { routeKey: CUSTOMER_ROUTE_KEYS.stockOptionCreate, label: "Option" };
    case "accumulator":
    case "mark_expired":
      return { routeKey: CUSTOMER_ROUTE_KEYS.stockAccumulatorCreate, label: "Accumulator" };
    default:
      break;
  }

  if (id) {
    return { routeKey: CUSTOMER_ROUTE_KEYS.stockUpdate, label: "Stock" };
  }

  return { routeKey: CUSTOMER_ROUTE_KEYS.stockCreate, label: "Stock" };
}

export default async function StockFormPage({ params, searchParams }: PageProps) {
  const { tenant } = await params;
  const query = await searchParams;
  const child = query.child?.trim() ?? "";
  const id = query.id?.trim() ?? "";
  const { routeKey, label } = resolveStockFormGuard(child, id);

  if (!(await customerPageAllows(tenant, routeKey))) {
    return (
      <div className="min-w-0 w-full" data-content-padding="false" data-page-layout="full">
        <AccessDeniedView label={label} />
      </div>
    );
  }

  return (
    <div className="min-w-0 w-full" data-content-padding="false" data-page-layout="full">
      <Suspense fallback={null}>
        <StockFormRoutePage />
      </Suspense>
    </div>
  );
}
