"use client";

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

import { saveStructureColumnPrefsClient } from "../../_lib/structure-api";
import { useStructureList } from "../../_lib/use-structure-list";
import {
  buildStructurePageSearchParams,
  DEFAULT_STRUCTURE_PAGE_SIZE,
  DEFAULT_STRUCTURE_SORTING,
  EMPTY_STRUCTURE_FILTERS,
  getStructureFilterColumnValue,
  parseStructurePageStateFromSearchParams,
  placementDateRangeToStructureFilters,
  setStructureFilterColumnValue,
} from "../../_lib/structure-filters";
import {
  createStructureColumns,
  FALLBACK_STRUCTURE_GRID_COLUMNS,
  STRUCTURE_OPTIONS_COLUMN_ID,
} from "./columns";
import { StructureDetailSheet } from "@/app/customer/_lib/transaction-detail-sheets";

export function ListStructureTable() {
  return (
    <CustomerStandardAssetListTable
      title="List Structure"
      emptyMessage="No structure records found."
      rowsPerPageId="structure-rows-per-page"
      moduleId="structure"
      singularName="Structure"
      formConfig={structureFormConfig}
      optionsColumnId={STRUCTURE_OPTIONS_COLUMN_ID}
      fallbackColumns={FALLBACK_STRUCTURE_GRID_COLUMNS}
      defaultPageSize={DEFAULT_STRUCTURE_PAGE_SIZE}
      defaultSorting={DEFAULT_STRUCTURE_SORTING}
      emptyFilters={EMPTY_STRUCTURE_FILTERS}
      resetColumnPrefsOnRefresh
      useList={useStructureList}
      saveColumnPrefs={saveStructureColumnPrefsClient}
      parsePageState={parseStructurePageStateFromSearchParams}
      buildPageSearchParams={buildStructurePageSearchParams}
      getFilterColumnValue={getStructureFilterColumnValue}
      setFilterColumnValue={setStructureFilterColumnValue}
      placementDateRangeToFilters={placementDateRangeToStructureFilters}
      getRangeFilters={(filters) => ({ amount: filters.amount })}
      applyRangeFilter={(filters, field, value) => {
        if (field !== "amount") return filters;
        return { ...filters, amount: value };
      }}
      createColumns={(catalog, onView, onEdit, options) =>
        createStructureColumns(catalog, onView, onEdit, {
          listPath: options.listPath,
          pagePermissions: options.pagePermissions,
        })
      }
      DetailSheet={StructureDetailSheet}
    />
  );
}
