import { AdaptableObject } from './AdaptableObject';
import { ColDef } from 'ag-grid-enterprise';
import { UniqueGridCell } from '../Selection/GridCell';
import { ColumnFilter } from './ColumnFilter';
/**
 * Defines data type of a Column; can be an AG Grid BaseCellDataType or an AdapTable array-related one
 */
export type AdaptableColumnDataType = 'text' | 'number' | 'boolean' | 'date' | 'object' | 'textArray' | 'numberArray' | 'tupleArray' | 'objectArray' | 'groupColumn' | 'unknown';
/**
 * Column Types recognised by AdapTable; to be set in GridOptions
 */
export type AdaptableColumnType = 'hiddenColumn' | 'calculatedColumn' | 'freeTextColumn' | 'actionColumn' | 'fdc3Column' | 'pivotAnyTotal' | 'pivotGrandTotal' | 'pivotColumnTotal' | 'pivotAggregationTotal';
export declare const HIDDEN_COLUMN_TYPE: AdaptableColumnType;
export declare const hiddenColDefConfig: ColDef;
export declare const CALCULATED_COLUMN_TYPE: AdaptableColumnType;
export declare const FREE_TEXT_COLUMN_TYPE: AdaptableColumnType;
export declare const ACTION_COLUMN_TYPE: AdaptableColumnType;
export declare const FDC3_COLUMN_TYPE: AdaptableColumnType;
export declare const PIVOT_ANY_TOTAL_COLUMN_TYPE: AdaptableColumnType;
export declare const PIVOT_GRAND_TOTAL_COLUMN_TYPE: AdaptableColumnType;
export declare const PIVOT_COLUMN_TOTAL_COLUMN_TYPE: AdaptableColumnType;
export declare const PIVOT_AGGREGATION_TOTAL_COLUMN_TYPE: AdaptableColumnType;
export declare function getColumnTypeFriendlyName(columnType: string): string;
/**
 * Base class for AdapTable Column containing most important properties
 */
export interface AdaptableColumnBase extends AdaptableObject {
    /**
     * Name of Column in AG Grid (e.g. field or colId)
     */
    columnId: string;
    /**
     * How Column is referred to in Adaptable UI; `Caption` property in AG Grid
     */
    friendlyName: string;
    /**
     * DataType of the Column
     */
    dataType: AdaptableColumnDataType;
    /**
     * Column Types of the Column
     */
    columnTypes?: string[];
}
export declare const isValidOrderForColumnGroups: ({ oldColumns, newColumns, }: {
    oldColumns: AdaptableColumn[];
    newColumns: AdaptableColumn[];
}) => boolean;
/**
 * Defines a Column Group
 */
export interface AdaptableColumnGroup {
    /**
     * Whether the Group can be split
     */
    allowGroupSplit: boolean;
    /**
     * Id for the Column Group
     */
    columnGroupId: string;
    /**
     * Friendly name for the Group
     */
    friendlyName: string;
    /**
     * Number of Columns in the the Group
     */
    groupCount: number;
}
/**
 * Defines an AdapTable Column - created at run-time based on AG Grid ColDef
 */
export interface AdaptableColumn<TData = any> extends AdaptableColumnBase {
    /**
     * Field in the row to get cell data from
     */
    field?: Extract<keyof TData, string>;
    /**
     * Whether the Column is always hidden in the UI but still available programmatically
     */
    alwaysHidden: boolean;
    /**
     * Whether the Column is the Tree Column (in Tree View)
     */
    isTreeColumn: boolean;
    /**
     * Is this the Primary Key Column
     */
    isPrimaryKey: boolean;
    /**
     * Column width
     */
    width?: number;
    /**
     * Flex details of the Column
     */
    flex?: number;
    /**
     * Is Column editable; returns FALSE if Column has conditional/dynamic editability, assuming some rows are editable
     */
    readOnly: boolean;
    /**
     * Is Column resizable
     */
    resizable: boolean;
    /**
     * Is Column currently visible
     */
    visible: boolean;
    /**
     * Is the Column ONLY available as a field and never visible
     */
    fieldOnly: boolean;
    /**
     * Is Column sortable
     */
    sortable: boolean;
    /**
     * Is Column able to be filtered
     */
    filterable: boolean;
    /**
     * Can Column be moved at run-time to a new position
     */
    moveable: boolean;
    /**
     * Can Column be removed from the grid
     */
    hideable: boolean;
    /**
     * Can Column form a Row Group
     */
    groupable: boolean;
    /**
     * Can Column be used in a Pivot Layout
     */
    pivotable: boolean;
    /**
     * Is Column able to display aggregations (e.g. 'sum') when grouped
     */
    aggregatable: boolean;
    /**
     * Can the Column be in included in Queries / Expressions
     */
    queryable: boolean;
    /**
     * Whether the Column can be included in Reports
     */
    exportable: boolean;
    /**
     * Available Aggregations for the Column
     */
    availableAggregationFunctions?: string[];
    /**
     * Custom Aggregation function for the Column
     */
    aggregationFunction?: string;
    /**
     * Is Column currently Row-Grouped
     */
    isGrouped: boolean;
    /**
     * Is Column a generated Row Group Column
     */
    isGeneratedRowGroupColumn: boolean;
    /**
     * Is Column a generated Selection Column
     */
    isGeneratedSelectionColumn: boolean;
    /**
     * Is Column a generated Pivot Result Column
     */
    isGeneratedPivotResultColumn: boolean;
    /**
     * Is Column pinned or locked into position
     */
    isFixed: boolean;
    /**
     * The pinned position of the Column
     */
    pinned: 'left' | 'right' | false;
    /**
     * Is it a Sparkline Column
     */
    isSparkline: boolean;
    /**
     * The parent Column group (if Column belongs to one)
     */
    columnGroup?: AdaptableColumnGroup;
    /**
     * Is Column a Calculated Column
     */
    isCalculatedColumn: boolean;
    /**
     * Is Column a Free Text Column
     */
    isFreeTextColumn: boolean;
    /**
     * Is Column an Action Column
     */
    isActionColumn: boolean;
    /**
     * Is Column a Pivot Total Column (GrandTotal, GroupTotal, AggregationTotal)
     */
    isPivotTotalColumn: boolean;
}
export interface AdaptableColumnProperties {
    sortable: boolean;
    filterable: boolean;
    moveable: boolean;
    groupable: boolean;
    pivotable: boolean;
    aggregatable: boolean;
}
export interface AdaptableColumnSummary {
    column: AdaptableColumn;
    columnFilter: ColumnFilter;
    uniqueGridCells: UniqueGridCell[];
}
