"use client";

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

import { saveStockColumnPrefsClient } from "../../_lib/stock-api";
import { useStockList } from "../../_lib/use-stock-list";
import {
  buildStockPageSearchParams,
  DEFAULT_STOCK_PAGE_SIZE,
  DEFAULT_STOCK_SORTING,
  EMPTY_STOCK_FILTERS,
  getStockFilterColumnValue,
  parseStockPageStateFromSearchParams,
  placementDateRangeToStockFilters,
  setStockFilterColumnValue,
} from "../../_lib/stock-filters";
import {
  createStockColumns,
  FALLBACK_STOCK_GRID_COLUMNS,
  STOCK_OPTIONS_COLUMN_ID,
} from "./columns";
import { StockDetailSheet } from "./stock-detail-sheet";

export function ListStocksTable() {
  return (
    <CustomerStandardAssetListTable
      title="List Stocks"
      emptyMessage="No stocks found."
      rowsPerPageId="stock-rows-per-page"
      moduleId="stock"
      singularName="Stock"
      formConfig={stockFormConfig}
      optionsColumnId={STOCK_OPTIONS_COLUMN_ID}
      fallbackColumns={FALLBACK_STOCK_GRID_COLUMNS}
      defaultPageSize={DEFAULT_STOCK_PAGE_SIZE}
      defaultSorting={DEFAULT_STOCK_SORTING}
      emptyFilters={EMPTY_STOCK_FILTERS}
      priceDecimals={2}
      useList={useStockList}
      saveColumnPrefs={saveStockColumnPrefsClient}
      parsePageState={parseStockPageStateFromSearchParams}
      buildPageSearchParams={buildStockPageSearchParams}
      getFilterColumnValue={getStockFilterColumnValue}
      setFilterColumnValue={setStockFilterColumnValue}
      placementDateRangeToFilters={placementDateRangeToStockFilters}
      createColumns={(catalog, onView, onEdit, options) =>
        createStockColumns(catalog, onView, onEdit, {
          priceDecimals: 2,
          quantityUseLocale: true,
          listPath: options.listPath,
          pagePermissions: options.pagePermissions,
        })
      }
      DetailSheet={StockDetailSheet}
    />
  );
}
