type TableQueryOptions = {
  table: string;
  select?: string[];
  joins?: string[];
  where?: string[];
  orWhere?: string[];
  orderBy?: string[];
  groupBy?: string[];
  limit?: number[];
  params?: any[];
  withCTE?: CTEOptions[];
};

type CTEOptions = {
  name: string;
  query?: TableQueryOptions;
  rawQuery?: string;
  params?: any[];
};

type TableSearchOptions = {
  fields: string[];
  text: string;
};

type TablePaginationOptions = {
  pageSize: number;
  pageIndex: number;
};

type TableSortOptions = {
  field: string;
  direction: SortDirection;
};

type TableVisibilityOptions = {
  hiddenColumns: string[];
};

type TableFiltersOptions = {
  search?: TableSearchOptions;
  pagination?: TablePaginationOptions;
  sort?: TableSortOptions;
  visibility?: TableVisibilityOptions;
  [key: string]: any;
};

type QueryResult = {
  query: string;
  params?: any[];
};
