import Graph from "node-dijkstra";
import { ParkingType } from "../types";
export interface RoadData2 {
    floor: string;
    lines: Array<{
        id: string;
        to: string;
        from: string;
        color: string;
        opacity: number;
        visible: boolean;
        userData: Record<string, string>;
        direction: "double" | "single" | "noDir" | "back";
    }>;
    points: Array<{
        id: string;
        cds: [number, number];
        name: string;
        type: "normal" | "graph" | "straightLadder" | "staircase" | "escalator" | "facility" | "wall" | "lane" | "parkingSpace" | "texture2d" | "glb" | "ramp" | "connectionPoint" | "store";
        floor: string;
        nodeId: string;
        visible: boolean;
        targetId: string;
        userData: Record<string, string>;
        escalatorType: "" | "single" | "double" | "jd";
        escalatorDirection: "" | "up" | "down" | "exit";
        openStatus?: boolean;
        startTime?: string;
        endTime?: string;
        permission?: number;
        relatedId?: string;
        crossName?: string;
        isStarted?: boolean;
        passWeight?: number;
        coverageArea?: number;
        parkingType?: ParkingType;
    }>;
    areas: Array<{
        id: string;
        name: string;
        imageUrl: string;
        type: number;
        showType: number;
        positionMode: number;
        cds: [number, number][][];
    }>;
}
export interface Facility {
    id: number;
    infrastructure_name: string;
    type_id: number;
    status: number;
    floors: number[];
    floor_names: string[];
    type_name: string;
    infra_type_icon: string;
    entry_infra_type: "facility" | "escalator" | "straightLadder" | "staircase" | "ramp" | "connectionPoint";
    entry_start_floor: string;
    entry_end_floor: string;
    type_alias_name: string;
    count: number;
}
export type TransformFacility = Facility & {
    entry_start_floor: {
        floorId: number;
        floor: string;
        name: string;
    }[];
    entry_end_floor: {
        floorId: number;
        floor: string;
        name: string;
    }[];
};
export interface Start2 {
    floor: string;
    nodeId?: string;
    coord?: [number, number];
}
type FacilityEnd2 = {
    floor?: string;
    facility?: string;
    parkingSpace?: string;
};
export type End2 = Start2 & FacilityEnd2;
export type RouteType2 = "" | "escalator" | "straightLadder" | "forward";
export type PathData2 = {
    floor: string;
    points: [number, number][];
    pointInfos: RoadData2["points"];
    endType: string;
    destId: string;
    distance: number;
    consume: number;
}[];
export interface GetPathOtherParams {
    adsorptionIntersection?: boolean;
}
export declare class RoadNetwork2 {
    private lift_priority;
    roadInfo: RoadData2[];
    facilities: TransformFacility[];
    pointMap: Map<string, {
        id: string;
        cds: [number, number];
        name: string;
        type: "normal" | "graph" | "straightLadder" | "staircase" | "escalator" | "facility" | "wall" | "lane" | "parkingSpace" | "texture2d" | "glb" | "ramp" | "connectionPoint" | "store";
        floor: string;
        nodeId: string;
        visible: boolean;
        targetId: string;
        userData: Record<string, string>;
        escalatorType: "" | "single" | "double" | "jd";
        escalatorDirection: "" | "up" | "down" | "exit";
        openStatus?: boolean;
        startTime?: string;
        endTime?: string;
        permission?: number;
        relatedId?: string;
        crossName?: string;
        isStarted?: boolean;
        passWeight?: number;
        coverageArea?: number;
        parkingType?: ParkingType;
    }>;
    nodeMap: Map<string, string[]>;
    facilityMap: Map<string, {
        id: string;
        cds: [number, number];
        name: string;
        type: "normal" | "graph" | "straightLadder" | "staircase" | "escalator" | "facility" | "wall" | "lane" | "parkingSpace" | "texture2d" | "glb" | "ramp" | "connectionPoint" | "store";
        floor: string;
        nodeId: string;
        visible: boolean;
        targetId: string;
        userData: Record<string, string>;
        escalatorType: "" | "single" | "double" | "jd";
        escalatorDirection: "" | "up" | "down" | "exit";
        openStatus?: boolean;
        startTime?: string;
        endTime?: string;
        permission?: number;
        relatedId?: string;
        crossName?: string;
        isStarted?: boolean;
        passWeight?: number;
        coverageArea?: number;
        parkingType?: ParkingType;
    }[]>;
    straightLadderMap: Map<string, {
        id: string;
        cds: [number, number];
        name: string;
        type: "normal" | "graph" | "straightLadder" | "staircase" | "escalator" | "facility" | "wall" | "lane" | "parkingSpace" | "texture2d" | "glb" | "ramp" | "connectionPoint" | "store";
        floor: string;
        nodeId: string;
        visible: boolean;
        targetId: string;
        userData: Record<string, string>;
        escalatorType: "" | "single" | "double" | "jd";
        escalatorDirection: "" | "up" | "down" | "exit";
        openStatus?: boolean;
        startTime?: string;
        endTime?: string;
        permission?: number;
        relatedId?: string;
        crossName?: string;
        isStarted?: boolean;
        passWeight?: number;
        coverageArea?: number;
        parkingType?: ParkingType;
    }[]>;
    escalatorMap: Map<string, {
        start?: RoadData2["points"][0];
        end?: RoadData2["points"][0];
    }[]>;
    rampMap: Map<string, {
        start?: RoadData2["points"][0];
        end?: RoadData2["points"][0];
    }[]>;
    staircaseMap: Map<string, {
        id: string;
        cds: [number, number];
        name: string;
        type: "normal" | "graph" | "straightLadder" | "staircase" | "escalator" | "facility" | "wall" | "lane" | "parkingSpace" | "texture2d" | "glb" | "ramp" | "connectionPoint" | "store";
        floor: string;
        nodeId: string;
        visible: boolean;
        targetId: string;
        userData: Record<string, string>;
        escalatorType: "" | "single" | "double" | "jd";
        escalatorDirection: "" | "up" | "down" | "exit";
        openStatus?: boolean;
        startTime?: string;
        endTime?: string;
        permission?: number;
        relatedId?: string;
        crossName?: string;
        isStarted?: boolean;
        passWeight?: number;
        coverageArea?: number;
        parkingType?: ParkingType;
    }[]>;
    connectionPointMap: Map<string, {
        id: string;
        cds: [number, number];
        name: string;
        type: "normal" | "graph" | "straightLadder" | "staircase" | "escalator" | "facility" | "wall" | "lane" | "parkingSpace" | "texture2d" | "glb" | "ramp" | "connectionPoint" | "store";
        floor: string;
        nodeId: string;
        visible: boolean;
        targetId: string;
        userData: Record<string, string>;
        escalatorType: "" | "single" | "double" | "jd";
        escalatorDirection: "" | "up" | "down" | "exit";
        openStatus?: boolean;
        startTime?: string;
        endTime?: string;
        permission?: number;
        relatedId?: string;
        crossName?: string;
        isStarted?: boolean;
        passWeight?: number;
        coverageArea?: number;
        parkingType?: ParkingType;
    }[]>;
    parkingMap: Map<string, {
        id: string;
        cds: [number, number];
        name: string;
        type: "normal" | "graph" | "straightLadder" | "staircase" | "escalator" | "facility" | "wall" | "lane" | "parkingSpace" | "texture2d" | "glb" | "ramp" | "connectionPoint" | "store";
        floor: string;
        nodeId: string;
        visible: boolean;
        targetId: string;
        userData: Record<string, string>;
        escalatorType: "" | "single" | "double" | "jd";
        escalatorDirection: "" | "up" | "down" | "exit";
        openStatus?: boolean;
        startTime?: string;
        endTime?: string;
        permission?: number;
        relatedId?: string;
        crossName?: string;
        isStarted?: boolean;
        passWeight?: number;
        coverageArea?: number;
        parkingType?: ParkingType;
    }>;
    lineMap: Map<string, Map<string, number>>;
    baseRoute: Graph;
    escalatorRoute: Graph;
    straightLadderRoute: Graph;
    forwardLineMap: Map<string, Map<string, number>>;
    forwardRoute: Graph;
    constructor(lift_priority?: number);
    isFacilityByType(type: string): boolean;
    private initFacilities;
    getParkingSpaceInfo(floor: string, parkingSpace: string): RoadData2["points"][0] | null;
    getNodeInfo(floor: string, nodeId: string): RoadData2["points"][0] | null;
    initRoute(roadInfo: RoadData2[], facilities: Facility[]): void;
    /**
     * 权限
     * 先弄一个不包含权限的路网
     * 如果规划的路线是需要权限的
     * 在根据权限创建一次性使用的路网
     * 1。保存有权限的点和路线？？？
     * 2。创建一次性路网的时候，怎么给默认的权重
     * 3. 通行设施怎么保存
     *  在添加通行设施时，如果是有权限的跳过
     *  在处理完设施点之后，先给设施添加到权限表里
     */
    getPermissionMap(permission: number): Set<{
        fromKey: string;
        toKey: string;
        distance: number;
        type: Exclude<Facility["entry_infra_type"], "facility"> | "";
    }>;
    setPermissionLine(fromKey: string, toKey: string, permission: number, distance: number, type: Exclude<Facility["entry_infra_type"], "facility"> | ""): void;
    addPermissionFacility(): void;
    addPermissionLineToMap(permission: number, types: (Exclude<Facility["entry_infra_type"], "facility"> | "")[], lineMap: Map<string, Map<string, number>>, weightMap: Map<(typeof types)[0], number>): void;
    addLineItem(start: string, end: string, distance: number, lineMap?: Map<string, Map<string, number>>): void;
    /**
     * 把设施添加的路网图中
     * @param escalatorPriority 扶梯权重
     * @param straightLadderPriority  直梯权重
     * @param staircasePriority 步行梯权重
     * @param lineMap 路网
     */
    addFacilityToLineMap(escalatorPriority: number, straightLadderPriority: number, staircasePriority: number, lineMap: Map<string, Map<string, number>>): void;
    initBaseRoute(): void;
    initEscalatorRoute(): void;
    initStraightLadderRoute(): void;
    initForwardRoute(): void;
    checkStart(start: Start2): boolean;
    checkEnd(end: End2): boolean;
    transformStart(start: Start2, type: RouteType2, options?: GetPathOtherParams): {
        floor: string;
        id: string;
    }[] | null;
    transformEnd(end: End2, type: RouteType2): {
        floor: string;
        id: string;
    }[] | {
        floor?: string;
        facility: string;
    } | null;
    /**
     *
     * @param start 起点
     * @param end 终点
     * @param type '' 最短路径 escalator 扶梯优先 straightLadder 直梯优先
     * @param permission 0 无权限  1  通行卡
     * @param travelDirection 行驶方向 从Y轴正方向的顺时针角度
     * @param options 其他参数
     * @returns
     */
    getPath(start: Start2, end: End2, type?: RouteType2, permission?: number, travelDirection?: number, options?: GetPathOtherParams): PathData2 | null | string;
    private getRoutePath;
    private getBasePath;
    private getEscalatorPath;
    private getStraightLadderPath;
    private getForwardPath;
    clear(): void;
}
export {};
