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 {
  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 = Number(params.page ?? "1")
  const pageSize = Number(
    params.page_size ?? String(TEMP_DATA_DEFAULT_PAGE_SIZE)
  )

  const {
    items,
    totalCount,
    page: currentPage,
    pageSize: currentPageSize,
    pageCount,
    pageHeading,
    attributeLabels,
    moduleList,
    summary,
    classSummary,
    bankApiOptions,
    statsRangeMeta,
    insertMissingIsinTransactions,
    errorMessage,
  } = await fetchBackendTempData(
    Number.isFinite(page) && page > 0 ? page : 1,
    filters,
    Number.isFinite(pageSize) && pageSize > 0
      ? pageSize
      : TEMP_DATA_DEFAULT_PAGE_SIZE
  )

  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}
    />
  )
}
