import { AdaptableColumn, AdaptableColumnDataType, Layout } from '../../types';
import { ColDef, ColGroupDef, Column } from 'ag-grid-enterprise';
/**
 * Provides run-time access to AdapTable Column related features
 */
export interface ColumnApi {
    /**
     * Returns all Columns available (including hidden, special)
     */
    getColumns(): AdaptableColumn[];
    /**
     * Returns all Columns that can be displayed in UI (excludes always hidden cols)
     */
    getUIAvailableColumns(): AdaptableColumn[];
    /**
     * Returns all columns excluding Action, FreeText and Calculated Columns
     */
    getNonSpecialColumns(): AdaptableColumn[];
    /**
     * Returns any Action, FreeText and Calculated Columns
     */
    getSpecialColumns(): AdaptableColumn[];
    /**
     * Returns all visible Columns
     */
    getVisibleColumns(): AdaptableColumn[];
    /**
     * Returns all numeric Columns
     */
    getNumericColumns(): AdaptableColumn[];
    /**
     * Returns all Date Columns
     */
    getDateColumns(): AdaptableColumn[];
    /**
     * Returns all Text Columns
     */
    getTextColumns(): AdaptableColumn[];
    /**
     * Returns all string array Columns
     */
    getTextArrayColumns(): AdaptableColumn[];
    /**
     * Returns all boolean Columns
     */
    getBooleanColumns(): AdaptableColumn[];
    /**
     * Returns all array columns (number, tuple-number, object-number & text)
     */
    getArrayColumns(): AdaptableColumn[];
    /**
     * Returns all numeric array columns (number, tuple-number, object-number)
     */
    getNumericArrayColumns(): AdaptableColumn[];
    /**
     * Returns all number-array columns
     */
    getNumberArrayColumns(): AdaptableColumn[];
    /**
     * Returns all tuple-number-array columns e.g. [[1,2],[3,4]]
     */
    getTupleNumberArrayColumns(): AdaptableColumn[];
    /**
     * Returns all object-number-array columns e.g. [{x:1,y:2},{x:3,y:4}]
     */
    getObjectNumberArrayColumns(): AdaptableColumn[];
    /**
     * Returns all Sortable Columns
     */
    getSortableColumns(): AdaptableColumn[];
    /**
     * Returns all Sortable Columns
     */
    getFilterableColumns(): AdaptableColumn[];
    /**
     * Returns all Groupable Columns
     */
    getGroupableColumns(): AdaptableColumn[];
    /**
     * Returns all Pivotable Columns
     */
    getPivotableColumns(): AdaptableColumn[];
    /**
     * Returns all Aggregatable Columns
     */
    getAggregatableColumns(): AdaptableColumn[];
    /**
     * Returns all Queryable Columns
     */
    getQueryableColumns(): AdaptableColumn[];
    /**
     * Returns Columns that are always hidden in UI (but available for Expressions)
     */
    getAlwaysHiddenColumns(): AdaptableColumn[];
    /**
     * Returns all Exportable Columns
     */
    getExportableColumns(): AdaptableColumn[];
    /**
     * Returns all Columns that have given DataType
     * @param dataType the DataType of the Columns to retrieve
     */
    getColumnsWithDataType(dataType: AdaptableColumnDataType): AdaptableColumn[];
    /**
     * Selects (highlights) a Column
     * @param columnId Column to select
     */
    selectColumn(columnId: string): void;
    /**
     * Adds (highlights) a Column to any existing selection
     * @param columnId Column to select
     */
    addColumnToSelection(columnId: string): void;
    /**
     * Selects (highlights) group of Columns
     * @param columnIds columns to select
     */
    selectColumns(columnIds: string[]): void;
    /**
     * Adds (highlights) a group of Columns to any existing selection
     * @param columnIds columns to select
     */
    addColumnsToSelection(columnIds: string[]): void;
    /**
     * Selects all Columns
     */
    selectAllColumns(): void;
    /**
     * AutoSizes a Column
     * @param columnId Column to autosize
     */
    autosizeColumn(columnId: string): void;
    /**
     * Autosizes given Columns
     * @param columnIds Columns to autosize
     */
    autosizeColumns(columnIds: string[]): void;
    /**
     * Autosizes all Columns in the Grid
     */
    autosizeAllColumns(): void;
    /**
     * Hides a Column from Grid
     * @param columnId Column to hide
     */
    hideColumn(columnId: string): void;
    /**
     * Makes a Column visible
     * @param columnId Column to show
     */
    showColumn(columnId: string): void;
    /**
     * Checks if Column with given ColumnId is a row-group Column automatically generated by AG Grid
     * @param columnId ColumnId to check
     */
    isAutoRowGroupColumn(columnId: string): boolean;
    /**
     * Checks if Column with given ColumnId is a row-group Column automatically generated by AG Grid, for row-grouping with group display type = 'single'
     * @param columnId ColumnId to check
     */
    isAutoRowGroupColumnForSingle(columnId: string): boolean;
    /**
     * Checks if Column with given ColumnId is a row-group Column automatically generated by AG Grid, for row-grouping with group display type = 'multi'
     * @param columnId ColumnId to check
     */
    isAutoRowGroupColumnForMulti(columnId: string): boolean;
    /**
     * Checks if Column with given ColumnId is a pivot Column automatically generated by AG Grid
     * @param columnId ColumnId to check
     */
    isPivotResultColumn(columnId: string): boolean;
    /**
     * Checks if Column with given ColumnId is a Calculated Column
     * @param columnId ColumnId to check
     */
    isCalculatedColumn(columnId: string): boolean;
    /**
     * Checks if Column with given ColumnId is a Free Text Column
     * @param columnId ColumnId to check
     */
    isFreeTextColumn(columnId: string): boolean;
    /**
     * Checks if Column with given ColumnId is an Action Column
     * @param columnId ColumnId to check
     */
    isActionColumn(columnId: string): boolean;
    /**
     * Checks if Column with given ColumnId is a FDC3 Column
     * @param columnId
     */
    isFdc3Column(columnId: string): boolean;
    /**
     * Checks if the Column with the given `columnId` has DataType Number
     * @param columnId Column ID
     */
    hasNumberDataType(columnId: string): boolean;
    /**
     * Checks if the Column with the given `columnId` has DataType Boolean
     * @param columnId Column ID
     */
    hasBooleanDataType(columnId: string): boolean;
    /**
     * Checks if the Column with the given `columnId` has DataType Date
     * @param columnId Column ID
     */
    hasDateDataType(columnId: string): boolean;
    /**
     * Checks if the Column with the given `columnId` has an Numeric Array-like DataType (`NumberArray`,`TupleNumberArray` or `ObjectNumberArray`)
     * @param columnId Column ID
     */
    hasNumericArrayDataType(columnId: string): boolean;
    /**
     * Checks if the Column with the given `columnId` has any Array-like DataType (`TextArray`,`NumberArray`,`TupleNumberArray` or `ObjectNumberArray`)
     * @param columnId Column ID
     */
    hasArrayDataType(columnId: string): boolean;
    /**
     * Checks if the Column with the given `columnId` has a Text Array-like DataType (`TextArray`)
     * @param columnId Column ID
     */
    hasTextArrayDataType(columnId: string): boolean;
    /**
     * Returns Data Type for the Column with given ColumnId
     * @param columnId Column to check
     */
    getColumnDataTypeForColumnId(columnId: string): AdaptableColumnDataType | undefined;
    /**
     * Retrieves Friendly Name of Column with given ColumnId
     * @param columnId ColumnId to lookup
     */
    getFriendlyNameForColumnId(columnId: string, layout?: Layout): string;
    /**
     * Checks if Column has already been created
     * @param columnId ColumnId to check
     */
    doesColumnExist(columnId: string): boolean;
    /**
     * Retrieves Friendly Names for given ColumnIds
     * @param columnIds ColumnIds to lookup
     */
    getFriendlyNamesForColumnIds(columnIds: string[]): string[];
    /**
     * Retrieves AdapTable Column with given Friendly name
     * @param columnName Friendly Name to lookup
     * @param logWarning Whether to log warning if Column missing
     */
    getColumnWithFriendlyName(columnName: string, logWarning?: boolean): AdaptableColumn;
    /**
     * Retrieves Adaptable Columns with given Friendly names
     * @param friendlyNames Friendly Names to lookup
     */
    getColumnsWithFriendlyNames(friendlyNames: string[]): AdaptableColumn[];
    /**
     * Retrieves ColumnId for Column with given Friendly Name
     * @param friendlyName Friendly Name to Lookup
     */
    getColumnIdForFriendlyName(friendlyName: string): string;
    /**
     * Retrieves ColumnIds for Columns with given Friendly Names
     * @param friendlyName Friendly Names to Lookup
     */
    getColumnIdsForFriendlyNames(friendlyNames: string[]): string[];
    /**
     * Retrieves Adaptable Columns with given ColumnIds
     * @param columnIds Column Ids to lookup
     */
    getColumnsWithColumnIds(columnIds: string[]): AdaptableColumn[];
    /**
     * Retrieves AdapTable Column with given ColumnId
     * @param columnId ColumnId to lookup
     * @param logWarning Whether to log warning if Column missing
     */
    getColumnWithColumnId(columnId: string, logWarning?: boolean): AdaptableColumn | undefined;
    /**
     * Returns true if the given Column exists in the Grid
     * @param columnId Column to check
     */
    isColumnInGrid(columnId: string): boolean;
    /**
     * Retrieves current Primary Key Column in AdapTable. It may be undefined if the primary key is auto-generated, or it is NOT mapped to a column.
     */
    getPrimaryKeyColumn(): AdaptableColumn | undefined;
    /**
     * Returns the default Aggregation Function for a Column
     * @param columnId Column to Check
     */
    getDefaultAggFunc(columnId: string): string;
    /**
     * Opens Settings Panel with Column Info section selected and visible
     */
    openColumnInfoSettingsPanel(): void;
    /**
     * Returns available columns types defined under columnOptions.columnTypes
     */
    getColumnTypes(): string[];
    /**
     * Returns all columns of a given columnType
     * @param columnType the columnType to filter by
     */
    getColumnsByColumnType(columnType: string): AdaptableColumn[];
    /**
     * Returns all columns currently Row Grouped
     */
    getRowGroupedColumns(): AdaptableColumn[];
    /**
     * Sets a new Caption / Header for a Column (only for current Layout)
     * @param columnId Column to Update
     * @param caption New Caption to display
     */
    setColumnCaption(columnId: string, caption: string): void;
    /**
     * Returns AG Grid ColDef for a given ColumnId
     * @param columnId Column to use
     */
    getAGGridColDefForColumnId(columnId: string): ColDef | ColGroupDef;
    /**
     * Returns the AG Grid Column for a given ColumnId
     * @param columnId Column to use
     */
    getAGGridColumnForColumnId(columnId: string): Column;
}
