"use client";

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

import { saveInterestDividendColumnPrefsClient } from "../../_lib/interest-dividend-api";
import { useInterestDividendList } from "../../_lib/use-interest-dividend-list";
import {
  buildInterestDividendPageSearchParams,
  DEFAULT_INTEREST_DIVIDEND_PAGE_SIZE,
  DEFAULT_INTEREST_DIVIDEND_SORTING,
  EMPTY_INTEREST_DIVIDEND_FILTERS,
  getInterestDividendFilterColumnValue,
  parseInterestDividendPageStateFromSearchParams,
  placementDateRangeToInterestDividendFilters,
  setInterestDividendFilterColumnValue,
} from "../../_lib/interest-dividend-filters";
import {
  createInterestDividendColumns,
  FALLBACK_INTEREST_DIVIDEND_GRID_COLUMNS,
  INTEREST_DIVIDEND_OPTIONS_COLUMN_ID,
} from "./columns";
import { InterestDividendDetailSheet } from "./interest-dividend-detail-sheet";

export function ListInterestDividendTable() {
  return (
    <CustomerStandardAssetListTable
      title="List Interest / Dividend"
      emptyMessage="No interest / dividend records found."
      rowsPerPageId="interest-dividend-rows-per-page"
      moduleId="interest-dividend"
      singularName="Interest / dividend"
      formConfig={interestDividendFormConfig}
      optionsColumnId={INTEREST_DIVIDEND_OPTIONS_COLUMN_ID}
      fallbackColumns={FALLBACK_INTEREST_DIVIDEND_GRID_COLUMNS}
      defaultPageSize={DEFAULT_INTEREST_DIVIDEND_PAGE_SIZE}
      defaultSorting={DEFAULT_INTEREST_DIVIDEND_SORTING}
      emptyFilters={EMPTY_INTEREST_DIVIDEND_FILTERS}
      resetColumnPrefsOnRefresh
      useList={useInterestDividendList}
      saveColumnPrefs={saveInterestDividendColumnPrefsClient}
      parsePageState={parseInterestDividendPageStateFromSearchParams}
      buildPageSearchParams={buildInterestDividendPageSearchParams}
      getFilterColumnValue={getInterestDividendFilterColumnValue}
      setFilterColumnValue={setInterestDividendFilterColumnValue}
      placementDateRangeToFilters={placementDateRangeToInterestDividendFilters}
      getRangeFilters={(filters) => ({ total: filters.total })}
      applyRangeFilter={(filters, field, value) => {
        if (field !== "total") return filters;
        return { ...filters, total: value };
      }}
      createColumns={(catalog, onView, onEdit) =>
        createInterestDividendColumns(catalog, onView, onEdit)
      }
      DetailSheet={InterestDividendDetailSheet}
    />
  );
}
