"use client";

import { DataTable } from "@/components/ui/data-table";
import ErrorMessage from "@/shared/components/error-message";
import TableLoading from "@/shared/components/table-loading";
import { ColumnDef } from "@tanstack/react-table";

type TBasicTableProps<TData> = {
  data?: TData[];
  isLoading: boolean;
  error?: unknown;
  columns: ColumnDef<TData, any>[];
  page?: number;
  pageCount?: number;
  onPageChange?: (page: number) => void;
  onRowClick?: (row: TData) => void;
  onRowSelectStateChange: React.Dispatch<React.SetStateAction<TData[]>>;
  selectedRows?: TData[];
  headerLabels?: string[];
  variant?: "dashboard" | "default";
};

function BasicTable<TData>({
  data,
  isLoading,
  error,
  columns,
  page,
  pageCount,
  onPageChange,
  onRowClick,
  // rowSelection,
  onRowSelectStateChange,
  selectedRows,
  headerLabels,
  variant = "default",
}: TBasicTableProps<TData>) {
    const totalPages = data ? Math.ceil((pageCount ?? 0) / 10) : 1;

  if (isLoading)   return <TableLoading tableHeader={headerLabels ?? []} />;
  if (error)       return <ErrorMessage>Error loading data</ErrorMessage>;
  if (!data?.length)
    return <div className="p-4 text-center text-gray-500">No results.</div>;

  return (
    <DataTable
      data={data}
      columns={columns}
      page={page}
      pageCount={totalPages}
      onPageChange={onPageChange}
      onRowClick={onRowClick}
      onRowSelectStateChange={onRowSelectStateChange}
      selectedRows={selectedRows}
      variant={variant}
    />
  );
}

export default BasicTable;