import { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';
import { BlendType, IActiveOption, IAnimateOption, IAttrubuteAndElements, ICameraService, ICoordinateSystemService, IDataState, IEncodeFeature, IFontService, IGlobalConfigService, IIconService, IInteractionService, ILayer, ILayerConfig, ILayerModel, ILayerModelInitializationOptions, ILayerPlugin, ILayerService, IMapService, IModel, IModelInitializationOptions, IMultiPassRenderer, IPass, IPickingService, IPostProcessingPass, IRendererService, IScale, IScaleOptions, IShaderModuleService, ISourceCFG, IStyleAttributeService, IStyleAttributeUpdateOptions, 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;
    type: string;
    visible: boolean;
    zIndex: number;
    minZoom: number;
    maxZoom: number;
    inited: boolean;
    layerModelNeedUpdate: boolean;
    pickedFeatureID: number | null;
    selectedFeatureID: number | null;
    styleNeedUpdate: boolean;
    rendering: boolean;
    clusterZoom: number;
    layerType?: string | undefined;
    triangulation?: Triangulation | undefined;
    dataState: IDataState;
    hooks: {
        init: SyncBailHook;
        afterInit: SyncBailHook;
        beforeRender: SyncBailHook;
        beforeRenderData: SyncWaterfallHook;
        afterRender: SyncHook;
        beforePickingEncode: SyncHook;
        afterPickingEncode: SyncHook;
        beforeHighlight: SyncHook;
        afterHighlight: SyncHook;
        beforeSelect: SyncHook;
        afterSelect: SyncHook;
        beforeDestroy: SyncHook;
        afterDestroy: SyncHook;
    };
    models: IModel[];
    multiPassRenderer: IMultiPassRenderer;
    plugins: ILayerPlugin[];
    sourceOption: {
        data: any;
        options?: ISourceCFG;
    };
    layerModel: ILayerModel;
    shapeOption: {
        field: any;
        values: any;
    };
    sceneContainer: Container | undefined;
    tileLayer: any | undefined;
    layerChildren: ILayer[];
    masks: ILayer[];
    isVector: boolean;
    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 interactionService: IInteractionService;
    protected mapService: IMapService;
    protected styleAttributeService: IStyleAttributeService;
    protected layerSource: Source;
    protected postProcessingPassFactory: (name: string) => IPostProcessingPass<unknown>;
    protected normalPassFactory: (name: string) => IPass<unknown>;
    protected animateOptions: IAnimateOption;
    /**
     * 图层容器
     */
    private container;
    private encodedData;
    private configSchema;
    private currentPickId;
    private rawConfig;
    private needUpdateConfig;
    /**
     * 待更新样式属性，在初始化阶段完成注册
     */
    private pendingStyleAttributes;
    private scaleOptions;
    private animateStartTime;
    private aniamateStatus;
    private bottomColor;
    private isDestroied;
    constructor(config?: Partial<ILayerConfig & ChildLayerStyleOptions>);
    addMaskLayer(maskLayer: ILayer): void;
    removeMaskLayer(maskLayer: ILayer): void;
    getAttribute(name: string): import("@antv/l7-core").IStyleAttribute | undefined;
    getLayerConfig(): Partial<ILayerConfig & import("@antv/l7-core").ISceneConfig & ChildLayerStyleOptions>;
    updateLayerConfig(configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>): void;
    /**
     * 注入图层容器，父容器为场景容器
     * RootContainer 1
     *  -> SceneContainer 1.*
     *   -> LayerContainer 1.*
     */
    setContainer(container: Container, sceneContainer: Container): void;
    getContainer(): Container;
    setBottomColor(color: string): void;
    getBottomColor(): string;
    addPlugin(plugin: ILayerPlugin): ILayer;
    init(): this;
    updateModelData(data: IAttrubuteAndElements): void;
    createModelData(data: any, option?: ISourceCFG): any;
    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(): 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;
    setEncodedData(encodedData: IEncodeFeature[]): void;
    getEncodedData(): IEncodeFeature[];
    getScale(name: string): any;
    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>): IModel;
    createAttrubutes(options: ILayerModelInitializationOptions & Partial<IModelInitializationOptions>): any;
    getTime(): number;
    setAnimateStartTime(): void;
    stopAnimate(): void;
    getLayerAnimateTime(): number;
    needPick(type: string): boolean;
    buildModels(): void;
    rebuildModels(): void;
    renderMulPass(multiPassRenderer: IMultiPassRenderer): Promise<void>;
    renderModels(isPicking?: boolean): this;
    updateStyleAttribute(type: string, field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial<IStyleAttributeUpdateOptions>): void;
    getShaderPickStat(): boolean;
    /**
     * 继承空方法
     * @param time
     */
    setEarthTime(time: number): void;
    protected getConfigSchema(): void;
    protected getModelType(): unknown;
    protected getDefaultConfig(): {};
    private sourceEvent;
    private reRender;
    private splitValuesAndCallbackInAttribute;
}
