import { AllBanksListPage } from "@/components/xml-apis/all-banks/all-banks-list-page"
import {
  ALL_BANKS_DEFAULT_PAGE_SIZE,
  parseAllBanksListFilters,
} from "@/components/xml-apis/all-banks/data/all-banks-list-filters"
import { clampPageNumber, clampPageSize } from "@/config/pagination"
import { fetchBackendAllBanks } from "./_lib/all-banks-server-api"
export const maxDuration = 120

type AllBanksPageProps = {
  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 AllBanksListRoute({ searchParams }: AllBanksPageProps) {
  const params = await searchParams
  const filters = parseAllBanksListFilters(toUrlSearchParams(params))
  const page = clampPageNumber(params.page)
  const pageSize = clampPageSize(params.page_size, ALL_BANKS_DEFAULT_PAGE_SIZE)
  const {
    items,
    totalCount,
    page: currentPage,
    pageSize: currentPageSize,
    pageCount,
    currencyOptions,
    errorMessage,
  } = await fetchBackendAllBanks({ page, pageSize, filters })

  return (
    <AllBanksListPage
      initialData={items}
      initialTotalCount={totalCount}
      initialPage={currentPage}
      initialPageSize={currentPageSize}
      initialPageCount={pageCount}
      initialCurrencyOptions={currencyOptions}
      initialErrorMessage={errorMessage}
      initialFilters={filters}
    />
  )
}
