import { TempDataListPage } from "@/components/xml-apis/temp-data/temp-data-list-page"
import { parseTempDataListFilters } from "@/components/xml-apis/temp-data/data/temp-data-list-filters"
import { clampPageNumber, clampPageSize } from "@/config/pagination"
import {
  fetchBackendTempData,
  TEMP_DATA_DEFAULT_PAGE_SIZE,
} from "./_lib/temp-data-server-api"

type TempDataPageProps = {
  searchParams: Promise<Record<string, string | undefined>>
}

function toUrlSearchParams(
  params: Record<string, string | undefined>
): URLSearchParams {
  const searchParams = new URLSearchParams()
  for (const [key, value] of Object.entries(params)) {
    if (value) searchParams.set(key, value)
  }
  return searchParams
}

export default async function TempDataRoute({ searchParams }: TempDataPageProps) {
  const params = await searchParams
  const filters = parseTempDataListFilters(toUrlSearchParams(params))
  const page = clampPageNumber(params.page)
  const pageSize = clampPageSize(params.page_size, TEMP_DATA_DEFAULT_PAGE_SIZE)

  const {
    items,
    totalCount,
    page: currentPage,
    pageSize: currentPageSize,
    pageCount,
    pageHeading,
    attributeLabels,
    moduleList,
    summary,
    classSummary,
    bankApiOptions,
    statsRangeMeta,
    insertMissingIsinTransactions,
    errorMessage,
  } = await fetchBackendTempData(page, filters, pageSize)

  return (
    <TempDataListPage
      initialData={items}
      initialTotalCount={totalCount}
      initialPage={currentPage}
      initialPageSize={currentPageSize}
      initialPageCount={pageCount}
      initialPageHeading={pageHeading}
      initialAttributeLabels={attributeLabels}
      initialModuleList={moduleList}
      initialSummary={summary}
      initialClassSummary={classSummary}
      initialBankApiOptions={bankApiOptions}
      initialStatsRangeMeta={statsRangeMeta}
      initialInsertMissingEnabled={insertMissingIsinTransactions ?? true}
      initialErrorMessage={errorMessage}
      initialFilters={filters}
    />
  )
}
