import { ColumnDef } from '@tanstack/react-table'
import { JSX } from 'react'

type Labels = {
  orderAsc?: string
  orderDesc?: string
  filter?: string
  clearFilter?: string
  columns?: string
}

interface Pagination {
  pageIndex: number
  pageSize: number
}

interface Sticky {
  enabled: boolean
  top: number
}

export interface TableList {
  id: string
  label: string | JSX.Element
  onClick?: (id: string) => void
  checked?: () => boolean | boolean
  disabled?: boolean
}

export interface TableButton {
  render: () => JSX.Element
  list?: {
    options: TableList[]
    toggleableList?: boolean
    closeOnClick?: boolean
  }
  disabled?: boolean
  onClick?: () => void
}

export interface UncontrolledTableProps {
  data: any
  columns: ColumnDef<ColumnsTable>[]
  pagination?: Pagination
  totalPages?: number
  labels?: Labels
  tableClassName?: string
  sticky?: Sticky
  draggable?: boolean
  buttons?: TableButton[]
  configs?: TableButton[]
  hideColumns?: string[]
  onClick?: () => void
  onMouseOver?: () => void
  onMouseOut?: () => void
  onColumnVisibilityChange?: (column: string, value: boolean) => void
  onChangePage?: (pagination: Pagination) => void
  onFilterClick?: (column: string) => void
  onSortClick?: (column: string, direction: string) => void
  onDragEnd?: (data: any[]) => void
}

export interface ColumnsTable {
  header: string
  accessorKey: string
  type: string
  enableColumnFilter: boolean
  filterFn: string
  nofilter?: boolean
}
