import type { Color, Layer, LayersList, PickingInfo, UpdateParameters } from "@deck.gl/core";
import { CompositeLayer } from "@deck.gl/core";
import type { BinaryFeatureCollection } from "@loaders.gl/schema";
import type { Feature } from "geojson";
import type { ColormapFunctionType } from "../utils/colormapTools";
import type { ExtendedLayerProps, ReportBoundingBoxAction } from "../utils/layerTools";
import type { ContinuousLegendDataType, DiscreteLegendDataType } from "../../components/ColorLegend";
import type { WellLabelLayerProps } from "./layers/wellLabelLayer";
import { WellLabelLayer } from "./layers/wellLabelLayer";
import type { AbscissaTransform, LineStyleAccessor, LogCurveDataType, SizeAccessor, WellFeature, WellFeatureCollection, WellHeadStyleAccessor, WellsPickInfo } from "./types";
export declare enum SubLayerId {
    COLORS = "colors",
    SIMPLE = "simple",
    OUTLINE = "outline",
    HIGHLIGHT = "highlight",
    HIGHLIGHT_2 = "highlight2",
    LOG_CURVE = "log_curve",
    SELECTION = "selection",
    LABELS = "labels"
}
export interface WellsLayerProps extends ExtendedLayerProps {
    /**
     * Well data to render; described as a single GeoJSON feature collection, which each individual well as a distinct feature.
     *
     * Accepted data formats:
     * * A javascript object.
     * * A binary/flat GeoJSON object
     * * A url string pointing to external GeoJSON data.
     * * A promise returning GeoJSON data.
     */
    data: string | WellFeatureCollection | BinaryFeatureCollection | Promise<WellFeatureCollection | BinaryFeatureCollection>;
    pointRadiusScale: number;
    lineWidthScale: number;
    outline: boolean;
    selectedWell: string;
    logData: string | LogCurveDataType[];
    logName: string;
    logColor: string;
    logrunName: string;
    logRadius: number;
    logCurves: boolean;
    /** Control to refine the well path by super sampling it using a spline interpolation.
     * The well path between each pair of original vertices is split into sub-segments along the spline
     * interpolation.
     * The number of new sub-segments between each pair of original vertices is specified by refine
     * and defaults to 5 if refine is true.
     */
    refine: boolean | number;
    wellHeadStyle: WellHeadStyleAccessor;
    colorMappingFunction: ColormapFunctionType;
    lineStyle: LineStyleAccessor;
    /**
     * @deprecated use wellLabel instead
     */
    wellNameVisible?: boolean;
    /**
     * @deprecated use wellLabel instead
     * It true place name at top, if false at bottom.
     * If given as a number between 0 and 100,  will place name at this percentage of trajectory from top.
     */
    wellNameAtTop?: boolean | number;
    /**
     * @deprecated use wellLabel instead
     */
    wellNameSize?: number;
    /**
     * @deprecated use wellLabel instead
     */
    wellNameColor?: Color;
    /**
     * If true will prevent well name cluttering by not displaying overlapping names.
     * default false.
     * @deprecated use wellLabel instead
     */
    hideOverlappingWellNames?: boolean;
    isLog: boolean;
    depthTest: boolean;
    /**  If true means that input z values are interpreted as depths.
     * For example depth of z = 1000 corresponds to -1000 on the z axis. Default true.
     */
    ZIncreasingDownwards: boolean;
    /**  If true means that a simplified representation of the wells will be drawn.
     *   Useful for example during panning and rotation to gain speed.
     */
    simplifiedRendering: boolean;
    /** Sectional projection of data */
    section?: boolean | AbscissaTransform;
    reportBoundingBox?: React.Dispatch<ReportBoundingBoxAction>;
    wellLabel?: Partial<WellLabelLayerProps>;
}
export declare function getSize(type: string, accessor: SizeAccessor, offset?: number): number | ((object: Feature) => number);
export default class WellsLayer extends CompositeLayer<WellsLayerProps> {
    state: {
        data: WellFeatureCollection | undefined;
        well: string;
        selectedMultiWells: string[];
        selection: [number, number];
        sectionData?: WellFeatureCollection;
    };
    private recomputeDataState;
    shouldUpdateState({ changeFlags }: UpdateParameters<this>): boolean;
    updateState({ props, oldProps }: UpdateParameters<WellsLayer>): void;
    onClick(info: WellsPickInfo): boolean;
    setSelection(well: string | undefined, _selection?: [number | undefined, number | undefined]): void;
    setMultiSelection(wells: string[] | undefined): void;
    getWellDataState(): WellFeatureCollection | undefined;
    getLegendData(value: LogCurveDataType[]): ContinuousLegendDataType | DiscreteLegendDataType | null;
    setLegend(value: LogCurveDataType[]): void;
    getLogLayer(): Layer;
    getSelectionLayer(): Layer;
    getLogCurveData(): LogCurveDataType[] | undefined;
    setupLegend(): void;
    protected getWellLabelPosition(): number | ((d: Feature) => number);
    protected createWellLabelLayer(data: WellFeature[]): WellLabelLayer | null;
    renderLayers(): LayersList;
    getPickingInfo({ info }: {
        info: PickingInfo;
    }): WellsPickInfo;
}
export declare function getLogValues(d: LogCurveDataType, logrun_name: string, log_name: string): number[];
export declare function getLogInfo(d: LogCurveDataType, logrun_name: string, log_name: string): {
    name: string;
    description: string;
} | undefined;
