"use client";

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

import { useStockFundsList } from "../../_lib/use-stock-funds-list";
import { saveStockFundColumnPrefsClient } from "../../_lib/stock-funds-api";
import {
  buildStockFundPageSearchParams,
  DEFAULT_STOCK_FUND_PAGE_SIZE,
  DEFAULT_STOCK_FUND_SORTING,
  EMPTY_STOCK_FUND_FILTERS,
  getStockFundFilterColumnValue,
  parseStockFundPageStateFromSearchParams,
  placementDateRangeToStockFundFilters,
  setStockFundFilterColumnValue,
} from "../../_lib/stock-funds-filters";
import {
  createStockFundColumns,
  FALLBACK_STOCK_FUND_GRID_COLUMNS,
  STOCK_FUND_OPTIONS_COLUMN_ID,
} from "./columns";
import { StockFundDetailSheet } from "./stock-funds-detail-sheet";
import { StockFundsCreateMenu } from "../stock-funds-create-menu";

export function ListStockFundsTable() {
  return (
    <CustomerStandardAssetListTable
      title="List Stock Funds"
      emptyMessage="No stock funds found."
      rowsPerPageId="stock-funds-rows-per-page"
      moduleId="stock-funds"
      singularName="Stock fund"
      formConfig={stockFundsFormConfig}
      optionsColumnId={STOCK_FUND_OPTIONS_COLUMN_ID}
      fallbackColumns={FALLBACK_STOCK_FUND_GRID_COLUMNS}
      defaultPageSize={DEFAULT_STOCK_FUND_PAGE_SIZE}
      defaultSorting={DEFAULT_STOCK_FUND_SORTING}
      emptyFilters={EMPTY_STOCK_FUND_FILTERS}
      priceDecimals={2}
      quantityDecimals={2}
      showNewButton={false}
      resolveCanCreate={(permissions) =>
        permissions.accumulator_create === true || permissions.option_create === true
      }
      toolbarActions={({ listPath, permissions }) =>
        permissions.accumulator_create === true || permissions.option_create === true ? (
          <StockFundsCreateMenu listPath={listPath} permissions={permissions} />
        ) : null
      }
      useList={useStockFundsList}
      saveColumnPrefs={saveStockFundColumnPrefsClient}
      parsePageState={parseStockFundPageStateFromSearchParams}
      buildPageSearchParams={buildStockFundPageSearchParams}
      getFilterColumnValue={getStockFundFilterColumnValue}
      setFilterColumnValue={setStockFundFilterColumnValue}
      placementDateRangeToFilters={placementDateRangeToStockFundFilters}
      createColumns={createStockFundColumns}
      DetailSheet={StockFundDetailSheet}
    />
  );
}
