"use client";

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

import { useCommodityList } from "../../_lib/use-commodity-list";
import { saveCommodityColumnPrefsClient } from "../../_lib/commodity-api";
import { resolveCommodityEditTarget } from "../../_lib/resolve-commodity-edit-target";
import {
  buildCommodityPageSearchParams,
  DEFAULT_COMMODITY_PAGE_SIZE,
  DEFAULT_COMMODITY_SORTING,
  EMPTY_COMMODITY_FILTERS,
  getCommodityFilterColumnValue,
  parseCommodityPageStateFromSearchParams,
  placementDateRangeToCommodityFilters,
  setCommodityFilterColumnValue,
} from "../../_lib/commodity-filters";
import {
  createCommodityColumns,
  FALLBACK_COMMODITY_GRID_COLUMNS,
  COMMODITY_OPTIONS_COLUMN_ID,
} from "./columns";
import { CommodityDetailSheet } from "./commodity-detail-sheet";

export function ListCommoditiesTable() {
  return (
    <CustomerStandardAssetListTable
      title="List Commodity"
      emptyMessage="No commodities found."
      rowsPerPageId="commodity-rows-per-page"
      moduleId="commodity"
      singularName="Commodity"
      formConfig={commodityFormConfig}
      optionsColumnId={COMMODITY_OPTIONS_COLUMN_ID}
      fallbackColumns={FALLBACK_COMMODITY_GRID_COLUMNS}
      defaultPageSize={DEFAULT_COMMODITY_PAGE_SIZE}
      defaultSorting={DEFAULT_COMMODITY_SORTING}
      emptyFilters={EMPTY_COMMODITY_FILTERS}
      priceDecimals={2}
      quantityDecimals={2}
      useList={useCommodityList}
      saveColumnPrefs={saveCommodityColumnPrefsClient}
      parsePageState={parseCommodityPageStateFromSearchParams}
      buildPageSearchParams={buildCommodityPageSearchParams}
      getFilterColumnValue={getCommodityFilterColumnValue}
      setFilterColumnValue={setCommodityFilterColumnValue}
      placementDateRangeToFilters={placementDateRangeToCommodityFilters}
      createColumns={createCommodityColumns}
      wrapOnEdit={(row, defaultOnEdit, { listPath, router }) => {
        const parsed = resolveCommodityEditTarget(row);
        if (parsed) {
          const params = new URLSearchParams({
            child: parsed.child,
            id: parsed.id,
          });
          if (parsed.pid) {
            params.set("pid", parsed.pid);
          }
          router.push(`${listPath}/form?${params.toString()}`);
          return;
        }
        defaultOnEdit(row);
      }}
      DetailSheet={CommodityDetailSheet}
    />
  );
}
