"use client";

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

import { saveLeverageColumnPrefsClient } from "../../_lib/leverage-api";
import { useLeverageList } from "../../_lib/use-leverage-list";
import {
  buildLeveragePageSearchParams,
  DEFAULT_LEVERAGE_PAGE_SIZE,
  DEFAULT_LEVERAGE_SORTING,
  EMPTY_LEVERAGE_FILTERS,
  getLeverageFilterColumnValue,
  parseLeveragePageStateFromSearchParams,
  placementDateRangeToLeverageFilters,
  setLeverageFilterColumnValue,
} from "../../_lib/leverage-filters";
import {
  createLeverageColumns,
  FALLBACK_LEVERAGE_GRID_COLUMNS,
  LEVERAGE_OPTIONS_COLUMN_ID,
} from "./columns";
import { LeverageDetailSheet } from "./leverage-detail-sheet";

export function ListLeverageTable() {
  return (
    <CustomerStandardAssetListTable
      title="List Leverage"
      emptyMessage="No leverage records found."
      rowsPerPageId="leverage-rows-per-page"
      moduleId="leverage"
      singularName="Leverage"
      formConfig={leverageFormConfig}
      optionsColumnId={LEVERAGE_OPTIONS_COLUMN_ID}
      fallbackColumns={FALLBACK_LEVERAGE_GRID_COLUMNS}
      defaultPageSize={DEFAULT_LEVERAGE_PAGE_SIZE}
      defaultSorting={DEFAULT_LEVERAGE_SORTING}
      emptyFilters={EMPTY_LEVERAGE_FILTERS}
      resetColumnPrefsOnRefresh
      useList={useLeverageList}
      saveColumnPrefs={saveLeverageColumnPrefsClient}
      parsePageState={parseLeveragePageStateFromSearchParams}
      buildPageSearchParams={buildLeveragePageSearchParams}
      getFilterColumnValue={getLeverageFilterColumnValue}
      setFilterColumnValue={setLeverageFilterColumnValue}
      placementDateRangeToFilters={placementDateRangeToLeverageFilters}
      getRangeFilters={(filters) => ({ amount: filters.amount })}
      applyRangeFilter={(filters, field, value) => {
        if (field !== "amount") return filters;
        return { ...filters, amount: value };
      }}
      createColumns={(catalog, onView, onEdit, options) =>
        createLeverageColumns(catalog, onView, onEdit, {
          listPath: options.listPath,
          pagePermissions: options.pagePermissions,
        })
      }
      DetailSheet={LeverageDetailSheet}
    />
  );
}
