import { CustomerPageShell } from "@/app/customer/_components/customer-page-shell";
import { sessionAllowsRouteKeys } from "@/app/customer/_lib/customer-route-guard";
import { ErrorBanner } from "@/components/shared/error-banner";
import { getCustomerSessionContext } from "@/lib/frontend-auth/server";
import { serializeReportQuery } from "@/app/customer/[tenant]/reports/_shared/lib/serialize-report-query";

import { OptionsReportView } from "./_components/options-report/options-report-view";
import { OPTIONS_REPORT_PERMISSION } from "./_lib/options-report-route";
import {
  buildOptionsQueryFromBootstrap,
  parseOptionsUrlBootstrap,
} from "./_lib/parse-options-url-bootstrap";
import { fetchOptionsReportList } from "./_lib/options-report-server-api";

type PageProps = {
  params: Promise<{ tenant: string }>;
  searchParams: Promise<Record<string, string | string[] | undefined>>;
};

export default async function OptionsReportPage({ params, searchParams }: PageProps) {
  const { tenant } = await params;
  const resolvedSearchParams = await searchParams;
  const bootstrap = parseOptionsUrlBootstrap(resolvedSearchParams);
  const session = await getCustomerSessionContext(tenant);
  const permissionDenied =
    session.user != null &&
    !sessionAllowsRouteKeys(session.permissions.routes, [OPTIONS_REPORT_PERMISSION]);

  const initialQuery = buildOptionsQueryFromBootstrap(bootstrap);
  const initialQueryKey = serializeReportQuery(initialQuery);

  const listResult =
    !permissionDenied && session.user != null
      ? await fetchOptionsReportList(initialQuery, tenant)
      : { data: null, errorMessage: null, status: 401 };

  return (
    <CustomerPageShell
      pageLayout="viewport"
      className="min-h-0 overflow-hidden"
      contentClassName="min-h-0 flex-1 gap-0 overflow-hidden px-4 pt-3 pb-3 md:gap-0 lg:px-6"
    >
      {permissionDenied ? (
        <ErrorBanner message="Permission denied for the Options Report." />
      ) : (
        <OptionsReportView
          initialLifecycle={bootstrap.lifecycle}
          initialFilters={bootstrap.filters}
          initialColumnFilters={bootstrap.columnFilters}
          initialPage={bootstrap.page}
          initialPageSize={bootstrap.pageSize}
          initialSortKey={bootstrap.sortKey}
          initialSortOrder={bootstrap.sortOrder}
          initialListData={listResult.data}
          initialListError={listResult.errorMessage}
          initialListQueryKey={initialQueryKey}
        />
      )}
    </CustomerPageShell>
  );
}
