import { AsyncSeriesBailHook, AsyncWaterfallHook, SyncBailHook, SyncHook } from '@antv/async-hook';
import { BlendType, IActiveOption, IAnimateOption, IAttributeAndElements, ICameraService, ICoordinateSystemService, IDataState, IDebugService, IEncodeFeature, IFontService, IGlobalConfigService, IIconService, IInteractionService, ILayer, ILayerAttributesOption, ILayerConfig, ILayerModel, ILayerModelInitializationOptions, ILayerPickService, ILayerPlugin, ILayerService, ILegend, IMapService, IModel, IModelInitializationOptions, IMultiPassRenderer, IParseDataItem, IPass, IPickingService, IPostProcessingPass, IRendererService, IRenderOptions, IScale, IScaleOptions, IShaderModuleService, ISourceCFG, IStyleAttributeService, IStyleAttributeUpdateOptions, ITextureService, LayerEventType, LegendItems, StyleAttributeField, StyleAttributeOption, Triangulation } from '@antv/l7-core';
import Source from '@antv/l7-source';
import { EventEmitter } from 'eventemitter3';
import { Container } from 'inversify';
export default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter<LayerEventType> implements ILayer {
    id: string;
    name: string;
    parent: ILayer;
    coordCenter: number[];
    type: string;
    visible: boolean;
    zIndex: number;
    minZoom: number;
    maxZoom: number;
    inited: boolean;
    layerModelNeedUpdate: boolean;
    pickedFeatureID: number | null;
    selectedFeatureID: number | null;
    styleNeedUpdate: boolean;
    rendering: boolean;
    forceRender: boolean;
    clusterZoom: number;
    layerType?: string | undefined;
    triangulation?: Triangulation | undefined;
    layerPickService: ILayerPickService;
    textureService: ITextureService;
    defaultSourceConfig: {
        data: any[];
        options: ISourceCFG | undefined;
    };
    dataState: IDataState;
    hooks: {
        init: AsyncSeriesBailHook;
        afterInit: SyncBailHook;
        beforeRender: SyncBailHook;
        beforeRenderData: AsyncWaterfallHook;
        afterRender: SyncHook;
        beforePickingEncode: SyncHook;
        afterPickingEncode: SyncHook;
        beforeHighlight: SyncHook;
        afterHighlight: SyncHook;
        beforeSelect: SyncHook;
        afterSelect: SyncHook;
        beforeDestroy: SyncHook;
        afterDestroy: SyncHook;
    };
    models: IModel[];
    multiPassRenderer: IMultiPassRenderer;
    plugins: ILayerPlugin[];
    startInit: boolean;
    sourceOption: {
        data: any;
        options?: ISourceCFG;
    };
    layerModel: ILayerModel;
    shapeOption: {
        field: any;
        values: any;
    };
    sceneContainer: Container | undefined;
    tileLayer: any | undefined;
    layerChildren: ILayer[];
    masks: ILayer[];
    protected readonly configService: IGlobalConfigService;
    protected shaderModuleService: IShaderModuleService;
    protected cameraService: ICameraService;
    protected coordinateService: ICoordinateSystemService;
    protected iconService: IIconService;
    protected fontService: IFontService;
    protected pickingService: IPickingService;
    protected rendererService: IRendererService;
    protected layerService: ILayerService;
    protected debugService: IDebugService;
    protected interactionService: IInteractionService;
    protected mapService: IMapService;
    styleAttributeService: IStyleAttributeService;
    protected layerSource: Source;
    postProcessingPassFactory: (name: string) => IPostProcessingPass<unknown>;
    normalPassFactory: (name: string) => IPass<unknown>;
    protected animateOptions: IAnimateOption;
    /**
     * 图层容器
     */
    protected container: Container;
    private encodedData;
    private currentPickId;
    protected rawConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;
    private needUpdateConfig;
    /**
     * 待更新样式属性，在初始化阶段完成注册
     */
    protected pendingStyleAttributes: Array<{
        attributeName: string;
        attributeField: StyleAttributeField;
        attributeValues?: StyleAttributeOption;
        defaultName?: string;
        updateOptions?: Partial<IStyleAttributeUpdateOptions>;
    }>;
    private scaleOptions;
    private animateStartTime;
    private animateStatus;
    private isDestroyed;
    constructor(config?: Partial<ILayerConfig & ChildLayerStyleOptions>);
    addMask(layer: ILayer): void;
    removeMask(layer: ILayer): void;
    disableMask(): void;
    enableMask(): void;
    addMaskLayer(maskLayer: ILayer): void;
    removeMaskLayer(maskLayer: ILayer): void;
    getAttribute(name: string): import("@antv/l7-core").IStyleAttribute | undefined;
    getLayerConfig<T = any>(): Partial<ILayerConfig & import("@antv/l7-core").ISceneConfig & ChildLayerStyleOptions & T>;
    updateLayerConfig(configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>): void;
    /**
     * 注入图层容器，父容器为场景容器
     * RootContainer 1
     *  -> SceneContainer 1.*
     *   -> LayerContainer 1.*
     */
    setContainer(container: Container, sceneContainer: Container): void;
    getContainer(): Container;
    addPlugin(plugin: ILayerPlugin): ILayer;
    init(): Promise<void>;
    log(logType: string, step?: string): void;
    updateModelData(data: IAttributeAndElements): void;
    createModelData(data: any, option?: ISourceCFG): any;
    setLayerPickService(layerPickService: ILayerPickService): void;
    calculateEncodeData(data: any, option?: ISourceCFG): IEncodeFeature[] | null;
    /**
     * Model初始化前需要更新Model样式
     */
    prepareBuildModel(): void;
    color(field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial<IStyleAttributeUpdateOptions>): this;
    texture(field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial<IStyleAttributeUpdateOptions>): this;
    rotate(field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial<IStyleAttributeUpdateOptions>): this;
    size(field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial<IStyleAttributeUpdateOptions>): this;
    filter(field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial<IStyleAttributeUpdateOptions>): this;
    shape(field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial<IStyleAttributeUpdateOptions>): this;
    label(field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial<IStyleAttributeUpdateOptions>): this;
    animate(options: IAnimateOption | boolean): this;
    source(data: any, options?: ISourceCFG): ILayer;
    setData(data: any, options?: ISourceCFG): this;
    style(options: Partial<ChildLayerStyleOptions> & Partial<ILayerConfig>): ILayer;
    scale(field: string | number | IScaleOptions, cfg?: IScale): this;
    /**
     * 渲染所有的图层
     */
    renderLayers(): void;
    render(options?: Partial<IRenderOptions>): ILayer;
    /**
     * renderMultiPass 专门用于渲染支持 multipass 的 layer
     */
    renderMultiPass(): Promise<void>;
    active(options: IActiveOption | boolean): this;
    setActive(id: number | {
        x: number;
        y: number;
    }, options?: IActiveOption): void;
    select(option: IActiveOption | boolean): ILayer;
    setSelect(id: number | {
        x: number;
        y: number;
    }, options?: IActiveOption): void;
    setBlend(type: keyof typeof BlendType): ILayer;
    show(): ILayer;
    hide(): ILayer;
    setIndex(index: number): ILayer;
    setCurrentPickId(id: number): void;
    getCurrentPickId(): number | null;
    setCurrentSelectedId(id: number): void;
    getCurrentSelectedId(): number | null;
    isVisible(): boolean;
    setMultiPass(enableMultiPass: boolean, currentPasses?: Array<string | [string, {
        [key: string]: unknown;
    }]>): this;
    setMinZoom(minZoom: number): ILayer;
    getMinZoom(): number;
    getMaxZoom(): number;
    get(name: string): any;
    setMaxZoom(maxZoom: number): ILayer;
    setAutoFit(autoFit: boolean): ILayer;
    /**
     * zoom to layer Bounds
     */
    fitBounds(fitBoundsOptions?: unknown): ILayer;
    destroy(refresh?: boolean): void;
    clear(): void;
    clearModels(): void;
    isDirty(): boolean;
    setSource(source: Source): void;
    getSource(): Source;
    getScaleOptions(): IScaleOptions;
    encodeDataLength: number;
    setEncodedData(encodedData: IEncodeFeature[]): void;
    getEncodedData(): IEncodeFeature[];
    getScale(name: string): any;
    getLegend(name: string): ILegend;
    getLegendItems(name: string): LegendItems;
    pick({ x, y }: {
        x: number;
        y: number;
    }): void;
    boxSelect(box: [number, number, number, number], cb: (...args: any[]) => void): void;
    buildLayerModel(options: ILayerModelInitializationOptions & Partial<IModelInitializationOptions>): Promise<IModel>;
    createAttributes(options: ILayerModelInitializationOptions & Partial<IModelInitializationOptions>): any;
    getTime(): number;
    setAnimateStartTime(): void;
    stopAnimate(): void;
    getLayerAnimateTime(): number;
    needPick(type: string): boolean;
    buildModels(): Promise<void>;
    rebuildModels(): Promise<void>;
    renderMulPass(multiPassRenderer: IMultiPassRenderer): Promise<void>;
    renderModels(options?: Partial<IRenderOptions>): this;
    updateStyleAttribute(type: string, field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial<IStyleAttributeUpdateOptions>): boolean;
    getLayerAttributeConfig(): Partial<ILayerAttributesOption>;
    getShaderPickStat(): boolean;
    /**
     * 继承空方法
     * @param time
     */
    setEarthTime(time: number): void;
    processData(filterData: IParseDataItem[]): IParseDataItem[];
    getModelType(): string;
    protected getDefaultConfig(): {};
    protected sourceEvent: () => void;
    protected initLayerModels(): Promise<void>;
    protected reRender(): void;
    protected splitValuesAndCallbackInAttribute(valuesOrCallback?: unknown[], defaultValues?: unknown[]): {
        values: unknown[] | undefined;
        callback: (unknown[] & ((...args: any[]) => any)) | undefined;
    };
}
