"use client";

import { bondFundsFormConfig } from "@/components/form/transaction-workspace/module-configs";
import { CustomerStandardAssetListTable } from "@/app/customer/_components/customer-standard-asset-list-table";

import { useBondFundsList } from "../../_lib/use-bond-funds-list";
import { saveBondFundColumnPrefsClient } from "../../_lib/bond-funds-api";
import {
  buildBondFundPageSearchParams,
  DEFAULT_BOND_FUND_PAGE_SIZE,
  DEFAULT_BOND_FUND_SORTING,
  EMPTY_BOND_FUND_FILTERS,
  getBondFundFilterColumnValue,
  parseBondFundPageStateFromSearchParams,
  placementDateRangeToBondFundFilters,
  setBondFundFilterColumnValue,
} from "../../_lib/bond-funds-filters";
import {
  createBondFundColumns,
  FALLBACK_BOND_FUND_GRID_COLUMNS,
  BOND_FUND_OPTIONS_COLUMN_ID,
} from "./columns";
import { BondFundsDetailSheet } from "./bond-funds-detail-sheet";

export function ListBondFundsTable() {
  return (
    <CustomerStandardAssetListTable
      title="List Bond Funds"
      emptyMessage="No bond funds found."
      rowsPerPageId="bond-funds-rows-per-page"
      moduleId="bond-funds"
      singularName="Bond fund"
      formConfig={bondFundsFormConfig}
      optionsColumnId={BOND_FUND_OPTIONS_COLUMN_ID}
      fallbackColumns={FALLBACK_BOND_FUND_GRID_COLUMNS}
      defaultPageSize={DEFAULT_BOND_FUND_PAGE_SIZE}
      defaultSorting={DEFAULT_BOND_FUND_SORTING}
      emptyFilters={EMPTY_BOND_FUND_FILTERS}
      priceDecimals={2}
      quantityDecimals={2}
      useList={useBondFundsList}
      saveColumnPrefs={saveBondFundColumnPrefsClient}
      parsePageState={parseBondFundPageStateFromSearchParams}
      buildPageSearchParams={buildBondFundPageSearchParams}
      getFilterColumnValue={getBondFundFilterColumnValue}
      setFilterColumnValue={setBondFundFilterColumnValue}
      placementDateRangeToFilters={placementDateRangeToBondFundFilters}
      createColumns={createBondFundColumns}
      DetailSheet={BondFundsDetailSheet}
    />
  );
}
