import { AFM, Execution } from "@gooddata/typings";
import Highcharts from "../components/visualizations/chart/highcharts/highchartsEntryPoint";
import { ChartElementType, ChartType, HeadlineElementType, HeadlineType, TableElementType, TableType, VisElementType, VisType, XirrType } from "../constants/visualizationTypes";
import { IGeoLngLat } from "../interfaces/GeoChart";
import { TableRowForDrilling } from "./Table";
import { OnFiredDrillEvent, OnDrill } from "./Events";
export interface IDrillableItemUri {
    uri: string;
}
export interface IDrillableItemIdentifier {
    identifier: string;
}
export declare type IDrillableItem = IDrillableItemUri | IDrillableItemIdentifier | (IDrillableItemUri & IDrillableItemIdentifier);
export declare function isDrillableItemUri(item: IDrillableItem): item is IDrillableItemUri;
export declare function isDrillableItemIdentifier(item: IDrillableItem): item is IDrillableItemIdentifier;
export declare type IDrillEventCallback = (event: IDrillEvent) => void | boolean;
export declare type IDrillEventExtendedCallback = (event: IDrillEventExtended) => void;
export interface IDrillEventIntersectionElement {
    id: string;
    title: string;
    header?: {
        uri: string;
        identifier: string;
    };
}
export interface IDrillIntersectionAttributeItem extends Execution.IResultAttributeHeaderItem, Execution.IAttributeHeader {
}
export declare function isDrillIntersectionAttributeItem(header: DrillEventIntersectionElementHeader): header is IDrillIntersectionAttributeItem;
export declare function isDrillIntersectionAttribute(header: DrillEventIntersectionElementHeader): header is Execution.IAttributeHeader;
export declare type DrillEventIntersectionElementHeader = Execution.IAttributeHeader | Execution.IMeasureHeaderItem | Execution.ITotalHeaderItem | IDrillIntersectionAttributeItem;
export declare function isMappingMeasureHeaderItem(header: DrillEventIntersectionElementHeader): header is Execution.IMeasureHeaderItem;
export interface IDrillEventIntersectionElementExtended {
    header: DrillEventIntersectionElementHeader;
}
export interface IDrillEventIntersection {
    intersection: IDrillEventIntersectionElement[];
}
export interface IDrillEventIntersectionExtended {
    intersection: IDrillEventIntersectionElementExtended[];
}
export interface IDrillEventContextTableBase {
    type: TableType;
    element: TableElementType;
    columnIndex: number;
    rowIndex: number;
    row: any[];
}
export interface IDrillEventContextTable extends IDrillEventContextTableBase, IDrillEventIntersection {
}
export interface IDrillEventContextTableExtended extends IDrillEventContextTableBase, IDrillEventIntersectionExtended {
}
export declare function isDrillEventContextTableExtended(arg: IDrillEventContextBase): arg is IDrillEventContextTableExtended;
export interface IDrillEventContextHeadlineBase {
    type: HeadlineType;
    element: HeadlineElementType;
    value: string;
}
export interface IDrillEventContextHeadline extends IDrillEventContextHeadlineBase, IDrillEventIntersection {
}
export interface IDrillEventContextHeadlineExtended extends IDrillEventContextHeadlineBase, IDrillEventIntersectionExtended {
}
export declare function isDrillEventContextHeadlineExtended(arg: IDrillEventContextBase): arg is IDrillEventContextHeadlineExtended;
export interface IDrillEventContextXirrBase {
    type: XirrType;
    element: HeadlineElementType;
    value: string;
}
export interface IDrillEventContextXirr extends IDrillEventContextXirrBase, IDrillEventIntersection {
}
export interface IDrillEventContextXirrExtended extends IDrillEventContextXirrBase, IDrillEventIntersectionExtended {
}
export declare function isDrillEventContextXirrExtended(arg: IDrillEventContextBase): arg is IDrillEventContextXirrExtended;
export interface IDrillEventContextPointBase {
    type: ChartType;
    element: ChartElementType;
    elementChartType?: ChartType;
    x?: number;
    y?: number;
    z?: number;
    value?: string;
}
export interface IDrillEventContextPoint extends IDrillEventContextPointBase, IDrillEventIntersection {
}
export interface IDrillEventContextPointExtended extends IDrillEventContextPointBase, IDrillEventIntersectionExtended {
}
export interface IDrillPointBase {
    x: number;
    y: number;
    type?: ChartType;
}
export interface IDrillPoint extends IDrillPointBase, IDrillEventIntersection {
}
export interface IDrillPointExtended extends IDrillPointBase, IDrillEventIntersectionExtended {
}
export interface IDrillEventContextGroupBase {
    type: ChartType;
    element: ChartElementType;
}
export interface IDrillEventContextGroup extends IDrillEventContextGroupBase {
    points: IDrillPoint[];
}
export interface IDrillEventContextGroupExtended extends IDrillEventContextGroupBase {
    points: IDrillPointExtended[];
}
export interface IDrillEventContextBase {
    type: VisType;
    element: VisElementType;
    x?: number;
    y?: number;
    z?: number;
    columnIndex?: number;
    rowIndex?: number;
    row?: any[];
    value?: string;
}
export interface IDrillEventContext extends IDrillEventContextBase {
    points?: IDrillPoint[];
    intersection?: IDrillEventIntersectionElement[];
}
export interface IDrillEventContextExtended extends IDrillEventContextBase {
    points?: IDrillPointExtended[];
    intersection?: IDrillEventIntersectionElementExtended[];
}
export interface IGeoDrillEvent extends IDrillEventContextExtended {
    color?: number;
    location?: IGeoLngLat;
    locationName?: string;
    segmentBy?: string;
    size?: number;
}
export interface IDrillEvent {
    executionContext: AFM.IAfm;
    drillContext: IDrillEventContext;
}
export interface IDrillEventExtended {
    executionContext: AFM.IAfm;
    drillContext: IDrillEventContextExtended;
}
export interface IHighchartsParentTick {
    leaves: number;
    startAt: number;
    label: any;
}
export interface IHighchartsCategoriesTree {
    tick: IHighchartsParentTick;
}
export interface IHighchartsPointObject extends Highcharts.Point {
    drillIntersection: IDrillEventIntersectionElementExtended[];
    z?: number;
    value?: number;
}
export declare function isGroupHighchartsDrillEvent(event: Highcharts.DrilldownEventObject): boolean;
export interface ICellDrillEvent {
    columnIndex: number;
    rowIndex: number;
    row: TableRowForDrilling;
    intersection: IDrillEventIntersectionElement[];
}
export interface IDrillConfig {
    afm: AFM.IAfm;
    onFiredDrillEvent: OnFiredDrillEvent;
    onDrill?: OnDrill;
}
