"use client";

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

import { useBondList } from "../../_lib/use-bond-list";
import { saveBondColumnPrefsClient } from "../../_lib/bond-api";
import {
  buildBondPageSearchParams,
  DEFAULT_BOND_PAGE_SIZE,
  DEFAULT_BOND_SORTING,
  EMPTY_BOND_FILTERS,
  getBondFilterColumnValue,
  parseBondPageStateFromSearchParams,
  placementDateRangeToBondFilters,
  setBondFilterColumnValue,
} from "../../_lib/bond-filters";
import {
  createBondColumns,
  FALLBACK_BOND_GRID_COLUMNS,
  BOND_OPTIONS_COLUMN_ID,
} from "./columns";
import { BondDetailSheet } from "./bond-detail-sheet";

export function ListBondsTable() {
  return (
    <CustomerStandardAssetListTable
      title="List Bond"
      emptyMessage="No bonds found."
      rowsPerPageId="bond-rows-per-page"
      moduleId="bond"
      singularName="Bond"
      formConfig={bondFormConfig}
      optionsColumnId={BOND_OPTIONS_COLUMN_ID}
      fallbackColumns={FALLBACK_BOND_GRID_COLUMNS}
      defaultPageSize={DEFAULT_BOND_PAGE_SIZE}
      defaultSorting={DEFAULT_BOND_SORTING}
      emptyFilters={EMPTY_BOND_FILTERS}
      priceDecimals={3}
      quantityDecimals={2}
      useList={useBondList}
      saveColumnPrefs={saveBondColumnPrefsClient}
      parsePageState={parseBondPageStateFromSearchParams}
      buildPageSearchParams={buildBondPageSearchParams}
      getFilterColumnValue={getBondFilterColumnValue}
      setFilterColumnValue={setBondFilterColumnValue}
      placementDateRangeToFilters={placementDateRangeToBondFilters}
      createColumns={createBondColumns}
      DetailSheet={BondDetailSheet}
    />
  );
}
