"use client";

import { CustomerStandardAssetListTable } from "@/app/customer/_components/customer-standard-asset-list-table";
import { navigateToDerivativeChildEdit } from "@/app/customer/_lib/derivative-edit-navigation";

import { CommodityDetailSheet } from "../../../commodity/_components/list-commodities-table/commodity-detail-sheet";
import {
  COMMODITY_OPTIONS_COLUMN_ID,
  createCommodityColumns,
  FALLBACK_COMMODITY_GRID_COLUMNS,
} from "../../../commodity/_components/list-commodities-table/columns";
import {
  buildCommodityPageSearchParams,
  DEFAULT_COMMODITY_PAGE_SIZE,
  DEFAULT_COMMODITY_SORTING,
  EMPTY_COMMODITY_FILTERS,
  getCommodityFilterColumnValue,
  parseCommodityPageStateFromSearchParams,
  placementDateRangeToCommodityFilters,
  setCommodityFilterColumnValue,
} from "../../../commodity/_lib/commodity-filters";
import { resolveCommodityEditTarget } from "../../../commodity/_lib/resolve-commodity-edit-target";
import { saveDerivativesCommoditiesColumnPrefsClient } from "../../_lib/derivatives-commodities-api";
import { useDerivativesCommoditiesList } from "../../_lib/use-derivatives-commodities-list";
import { DerivativesCommoditiesCreateMenu } from "../derivatives-commodities-create-menu";
import { usePortfolioScopePageReset } from "@/app/customer/_lib/admin/use-portfolio-scope-page-reset";

export function ListDerivativesCommoditiesTable() {
  return (
    <CustomerStandardAssetListTable
      title="List Derivatives"
      emptyMessage="No derivatives found."
      rowsPerPageId="derivatives-commodities-rows-per-page"
      singularName="Derivative"
      // No moduleId and no formConfig: this hub owns neither a form nor a
      // delete/update module — rows belong to the option/accumulator children,
      // and wrapOnEdit routes into their forms.
      listPath="/customer/derivatives-commodities"
      optionsColumnId={COMMODITY_OPTIONS_COLUMN_ID}
      fallbackColumns={FALLBACK_COMMODITY_GRID_COLUMNS}
      defaultPageSize={DEFAULT_COMMODITY_PAGE_SIZE}
      defaultSorting={DEFAULT_COMMODITY_SORTING}
      emptyFilters={EMPTY_COMMODITY_FILTERS}
      useList={useDerivativesCommoditiesList}
      saveColumnPrefs={saveDerivativesCommoditiesColumnPrefsClient}
      parsePageState={parseCommodityPageStateFromSearchParams}
      buildPageSearchParams={buildCommodityPageSearchParams}
      getFilterColumnValue={getCommodityFilterColumnValue}
      setFilterColumnValue={setCommodityFilterColumnValue}
      placementDateRangeToFilters={placementDateRangeToCommodityFilters}
      createColumns={(catalog, onView, onEdit, options) =>
        createCommodityColumns(catalog, onView, onEdit, {
          priceDecimals: 2,
          quantityDecimals: 2,
          listPath: options.listPath,
          pagePermissions: options.pagePermissions,
        })
      }
      wrapOnEdit={(row, _defaultOnEdit, ctx) =>
        navigateToDerivativeChildEdit(resolveCommodityEditTarget(row), row, ctx)
      }
      DetailSheet={CommodityDetailSheet}
      showNewButton={false}
      resolveCanCreate={(permissions) =>
        permissions.accumulator_create === true || permissions.option_create === true
      }
      toolbarActions={({ listPath, permissions }) =>
        permissions.accumulator_create === true || permissions.option_create === true ? (
          <DerivativesCommoditiesCreateMenu listPath={listPath} permissions={permissions} />
        ) : null
      }
    />
  );
}
