import { Matrix4 } from "math.gl";
import type { PickingInfo } from "@deck.gl/core";
import type { Color, LayerContext } from "@deck.gl/core";
import type { Layer, LayersList, LayerManager, CompositeLayerProps } from "@deck.gl/core";
import type { colorTablesArray } from "@emerson-eps/color-tables/";
import type { ContinuousLegendDataType, DiscreteLegendDataType } from "../../components/ColorLegend";
import type { BoundingBox3D } from "../../utils";
export interface TypeAndNameLayerProps {
    "@@type"?: string;
    name: string;
}
export interface ExtendedLayerProps extends CompositeLayerProps, TypeAndNameLayerProps {
}
export interface ExtendedLegendLayer extends Layer {
    getLegendData?: () => DiscreteLegendDataType | ContinuousLegendDataType;
}
export interface DeckGLLayerContext extends LayerContext {
    userData: {
        setEditedData: (data: Record<string, unknown>) => void;
        colorTables: colorTablesArray;
    };
}
export interface PropertyDataType {
    name: string;
    value: string | number;
    color?: Color;
}
export interface LayerPickInfo<T = any> extends PickingInfo<T> {
    propertyValue?: number;
    properties?: PropertyDataType[];
}
/**
 * Creates property object which will be displayed in the info card.
 *   createPropertyData("Property", value) is used to store the value,
 *      which is either a number of the category text (for categorical properties)
 *   createPropertyData("Value", categoryIndex) is used to store the category index in case of categorical property.
 *   createPropertyData("Depth", categoryIndex) is used to store depth coordinate (Z in 3d viewer, md in well log viewer)
 */
export declare function createPropertyData(name: string, value: string | number, color?: Color): PropertyDataType;
export declare function getModelMatrix(deg: number, x: number, y: number): Matrix4;
export declare function getModelMatrixScale(scaleZ: number): Matrix4;
export declare function getLayersInViewport(layers: Record<string, unknown>[] | LayersList, layerIds: string[] | undefined): Record<string, unknown>[] | LayersList;
export declare function getLayersByType(layers: LayersList, type: string): LayersList;
export type NewLayersList = LayersList & {
    id: string;
    props: prop;
};
type prop = {
    data: wellData;
    visible: boolean;
};
type wellData = {
    features: feature[];
    type: string;
    unit?: string;
};
type feature = {
    properties: {
        name: string;
    };
};
export declare function getWellLayerByTypeAndSelectedWells(layers: LayersList, type: string, selectedWell: string): LayersList;
export declare function getLayersById(layers: LayersList, id: string): LayersList;
export declare function isDrawingEnabled(layer_manager: LayerManager): boolean;
export declare function invertZCoordinate(dataArray: Float32Array): void;
/**
 * Calculates the axis-aligned bounding box for a set of 3D points.
 *
 * @param dataArray - A flat `Float32Array` containing 3D coordinates in the order [x0, y0, z0, x1, y1, z1, ...].
 * @param zIncreasingDownwards - Optional. If `true`, inverts the Z-axis direction to account for coordinate systems where Z increases downwards. Defaults to `false`.
 * @returns A tuple of six numbers: [minX, minY, minZ, maxX, maxY, maxZ], representing the minimum and maximum coordinates along each axis.
 */
export declare function computeBoundingBox(dataArray: Float32Array, zIncreasingDownwards?: boolean): BoundingBox3D;
export type ReportBoundingBoxAction = {
    layerBoundingBox: BoundingBox3D;
};
export {};
