import { type IDrillToAttributeUrl as IDrillToAttributeUrlModel, type IDrillToCustomUrl as IDrillToCustomUrlModel, type IDrillToInsight as IDrillToInsightModel, type IInsight as IInsightModel, type IKeyDriveAnalysis as IKeyDriveAnalysisModel, type IListedDashboard as IListedDashboardModel, type ObjRef, type SourceInsightFilterObjRef, type SourceMeasureFilterObjRef } from "@gooddata/sdk-model";
import { type IAvailableDrillTargetMeasure, type IAvailableDrillTargets } from "@gooddata/sdk-ui";
import type { IKdaDefinition } from "../../kdaDialog/types.js";
import type { DashboardDrillCommand, ICrossFiltering, IDrill, IDrillDown, IDrillToAttributeUrl, IDrillToCustomUrl, IDrillToDashboard, IDrillToInsight, IDrillToLegacyDashboard, IKeyDriverAnalysis } from "../../model/commands/drill.js";
import type { IDashboardCrossFilteringResolved, IDashboardDrillDownResolved, IDashboardDrillResolved, IDashboardDrillToAttributeUrlResolved, IDashboardDrillToCustomUrlResolved, IDashboardDrillToDashboardResolved, IDashboardDrillToInsightResolved, IDashboardDrillToLegacyDashboardResolved, IDashboardKeyDriverAnalysisResolved } from "../../model/events/drill.js";
import type { IDashboardCommandFailed } from "../../model/events/general.js";
import { type IDashboardDrillContext, type IDashboardDrillEvent, type IDrillDownDefinition } from "../../types.js";
/**
 * @alpha
 */
export type OnWidgetDrill = (drillEvent: IDashboardDrillEvent, drillContext: IDashboardDrillContext) => void;
/**
 * @internal
 */
export type OnDashboardDrillError = (event: IDashboardCommandFailed<DashboardDrillCommand>) => void;
/**
 * @internal
 */
export type OnDashboardDrill = (cmd: IDrill) => void;
/**
 * @internal
 */
export type OnDashboardDrillSuccess = (event: IDashboardDrillResolved) => void;
/**
 * @internal
 */
export type OnDrillDown = (cmd: IDrillDown) => void;
/**
 * @alpha
 */
export type OnDrillDownSuccess = (event: IDashboardDrillDownResolved) => void;
/**
 * @internal
 */
export type OnDrillToInsight = (cmd: IDrillToInsight) => void;
/**
 * @alpha
 */
export type OnDrillToInsightSuccess = (event: IDashboardDrillToInsightResolved) => void;
/**
 * @internal
 */
export type OnDrillToDashboard = (cmd: IDrillToDashboard) => void;
/**
 * @alpha
 */
export type OnDrillToDashboardSuccess = (event: IDashboardDrillToDashboardResolved) => void;
/**
 * @internal
 */
export type OnDrillToAttributeUrl = (cmd: IDrillToAttributeUrl) => void;
/**
 * @alpha
 */
export type OnDrillToAttributeUrlSuccess = (event: IDashboardDrillToAttributeUrlResolved) => void;
/**
 * @internal
 */
export type OnDrillToCustomUrl = (cmd: IDrillToCustomUrl) => void;
/**
 * @alpha
 */
export type OnDrillToCustomUrlSuccess = (event: IDashboardDrillToCustomUrlResolved) => void;
/**
 * @internal
 */
export type OnDrillToLegacyDashboard = (cmd: IDrillToLegacyDashboard) => void;
/**
 * @internal
 */
export type OnDrillToLegacyDashboardSuccess = (event: IDashboardDrillToLegacyDashboardResolved) => void;
/**
 * @beta
 */
export interface IDrillStep {
    drillEvent: IDashboardDrillEvent;
    drillDefinition: IDrillToInsightModel | IDrillDownDefinition;
    insight: IInsightModel;
}
/**
 * @internal
 */
export type OnCrossFiltering = (cmd: ICrossFiltering) => void;
/**
 * @internal
 */
export type OnCrossFilteringSuccess = (event: IDashboardCrossFilteringResolved) => void;
/**
 * @internal
 */
export type OnCrossFilteringError = OnDashboardDrillError;
/**
 * @internal
 */
export interface IKeyDriveInfo {
    readonly keyDriveDefinition: IKdaDefinition;
    drillEvent: IDashboardDrillEvent;
    drillDefinition: IKeyDriveAnalysisModel;
}
/**
 * @internal
 */
export type OnKeyDriverAnalysis = (cmd: IKeyDriverAnalysis) => void;
/**
 * @internal
 */
export type OnKeyDriverAnalysisSuccess = (event: IDashboardKeyDriverAnalysisResolved) => void;
/**
 * @internal
 */
export type OnKeyDriverAnalysisError = OnDashboardDrillError;
/**
 * @internal
 */
export type IDrillToUrl = IDrillToCustomUrlModel | IDrillToAttributeUrlModel;
export declare function isDrillToUrl(drillDefinition: unknown): drillDefinition is IDrillToUrl;
export declare enum DRILL_TARGET_TYPE {
    DRILL_TO_DASHBOARD = "DrillToDashboard",
    DRILL_TO_INSIGHT = "DrillToInsight",
    DRILL_DOWN = "DrillDown",
    DRILL_TO_URL = "DrillToUrl"
}
export interface IDrillConfigItemBase {
    type: "measure" | "attribute";
    title: string;
    originLocalIdentifier: string;
    localIdentifier: string;
    drillTargetType?: DRILL_TARGET_TYPE;
    complete: boolean;
    warning?: string;
    attributes: IAvailableDrillTargetMeasure["attributes"];
    widgetRef: ObjRef;
    /**
     * Local identifiers of attribute display forms that should be ignored in drill intersection.
     */
    drillIntersectionIgnoredAttributes?: string[];
}
export type IDrillConfigItem = IDrillToDashboardConfig | IDrillToInsightConfig | IDrillToUrlConfig | IDrillDownAttributeHierarchyConfig;
export type IDrillConfigItemTarget = IDrillToDashboardConfigTarget | IDrillToInsightConfigTarget | IDrillToUrlConfigTarget | IDrillDownAttributeHierarchyTarget;
export interface IDrillToDashboardConfigTarget {
    dashboard?: ObjRef;
    dashboardTab?: string;
}
export type IDrillToDashboardConfig = IDrillConfigItemBase & IDrillToDashboardConfigTarget & IDrillFiltersConfigExtended;
export declare function isDrillToDashboardConfig(item: unknown): item is IDrillToDashboardConfig;
export interface IDrillToInsightConfigTarget {
    insightRef?: ObjRef;
}
export interface IDrillFiltersConfigExtended {
    ignoredDashboardFilters?: string[];
    includedSourceInsightFiltersObjRefs?: SourceInsightFilterObjRef[];
    includedSourceMeasureFiltersObjRefs?: SourceMeasureFilterObjRef[];
}
export type IDrillToInsightConfig = IDrillConfigItemBase & IDrillToInsightConfigTarget & IDrillFiltersConfigExtended;
export declare function isDrillToInsightConfig(item: unknown): item is IDrillToInsightConfig;
export interface IDrillToCustomUrlConfig {
    customUrl: string;
}
export declare function isDrillToCustomUrlConfig(item: unknown): item is IDrillToCustomUrlConfig;
export interface IDrillToAttributeUrlConfig {
    insightAttributeDisplayForm: ObjRef;
    drillToAttributeDisplayForm: ObjRef;
    implicit?: boolean;
}
export declare function isDrillToAttributeUrlConfig(item: unknown): item is IDrillToAttributeUrlConfig;
export type UrlDrillTarget = IDrillToCustomUrlConfig | IDrillToAttributeUrlConfig;
export interface IDrillToUrlConfigTarget {
    urlDrillTarget?: UrlDrillTarget;
}
export type IDrillToUrlConfig = IDrillConfigItemBase & IDrillToUrlConfigTarget;
export declare function isDrillToUrlConfig(item: unknown): item is IDrillToUrlConfig;
/**
 * @internal
 */
export interface IDrillDownAttributeHierarchyTarget {
    type: "attribute";
    attributeHierarchyRef: ObjRef;
}
export type IDrillDownAttributeHierarchyConfig = IDrillConfigItemBase & IDrillDownAttributeHierarchyTarget;
export declare function isDrillDownToAttributeHierarchyConfig(item: unknown): item is IDrillDownAttributeHierarchyConfig;
export declare enum AttributeDisplayFormType {
    HYPERLINK = "GDC.link",
    IMAGE = "GDC.image",
    GEO_PUSHPIN = "GDC.geo.pin",
    GEO_PUSHPIN_LATITUDE = "GDC.geo.pin_latitude",
    GEO_PUSHPIN_LONGITUDE = "GDC.geo.pin_longitude",
    GEO_AREA = "GDC.geo.area"
}
export interface IAttributeDisplayForm {
    formOf: ObjRef;
    identifier: string;
    uri: string;
    ref: ObjRef;
    type?: AttributeDisplayFormType;
    displayFormTitle: string;
    attributeTitle: string;
}
export interface IDefinitionValidationData {
    supportedDrillableItems: IAvailableDrillTargets;
    dashboardsList: IListedDashboardModel[];
    attributeDisplayForms?: IAttributeDisplayForm[];
}
export declare function isAvailableDrillTargetMeasure(obj: unknown): obj is IAvailableDrillTargetMeasure;
export interface IDrillDownAttributeHierarchyDefinition {
    type: "drillDownAttributeHierarchy";
    attributeHierarchyRef: ObjRef;
    originLocalIdentifier?: string;
    attributes: IAvailableDrillTargetMeasure["attributes"];
    drillIntersectionIgnoredAttributes: string[];
}
export declare function isDrillDownToAttributeHierarchyDefinition(item: unknown): item is IDrillDownAttributeHierarchyDefinition;
//# sourceMappingURL=types.d.ts.map