"use client";

import * as React from "react";

import {
  getCoreRowModel,
  getPaginationRowModel,
  useReactTable,
  type PaginationState,
} from "@tanstack/react-table";

import { DataTablePagination, DataTableShell } from "@/app/dashboard/_components/data-table";

import { createExcludedFromTotalValueColumns } from "./columns";
import type { ExcludedFromTotalValueRow } from "./schema";

type Props = {
  data: ExcludedFromTotalValueRow[];
};

export function ExcludedFromTotalValueTable({ data }: Props) {
  const [pagination, setPagination] = React.useState<PaginationState>({
    pageIndex: 0,
    pageSize: 50,
  });

  const pageOffset = pagination.pageIndex * pagination.pageSize;

  const columns = React.useMemo(
    () => createExcludedFromTotalValueColumns(pageOffset),
    [pageOffset],
  );

  const table = useReactTable({
    data,
    columns,
    state: { pagination },
    onPaginationChange: setPagination,
    getCoreRowModel: getCoreRowModel(),
    getPaginationRowModel: getPaginationRowModel(),
    getRowId: (row) => row.id,
  });

  return (
    <div className="space-y-4">
      <DataTableShell
        table={table}
        columnCount={columns.length}
        emptyMessage="No excluded transactions. Total Value includes every holding."
        renderFilterCell={() => null}
      />

      <DataTablePagination
        table={table}
        totalRows={data.length}
        itemNoun="transaction"
        idPrefix="excluded-from-total-value"
      />
    </div>
  );
}
