import { ActionResponseData, RouteLegData, WaypointData } from "../../../../../models";
import { RouteResultEditorBase } from "../../../route-result-editor-base";
import { ShipmentInsertPositions } from "../helpers/preserve-order-shipment-helper";
import { JobInsertPosition } from "../helpers/preserve-order-job-helper";
/**
 * Builds/updates agent waypoints for preserveOrder edits, without calling the routing API.
 * Keeps `waypoints[*].actions[*].waypoint_index` and `actions[*].waypoint_index` consistent.
 * Also manages legs when inserting waypoints.
 */
export declare class WaypointBuilder {
    static insertJobWaypoint(context: RouteResultEditorBase, agentIndex: number, jobIndex: number, position: JobInsertPosition): void;
    /**
     * Creates and inserts waypoints for a shipment (pickup and delivery).
     */
    static insertShipmentWaypoints(context: RouteResultEditorBase, agentIndex: number, shipmentIndex: number, positions: ShipmentInsertPositions): void;
    private static addActionToWaypoint;
    static actionsMatch(a: ActionResponseData, b: ActionResponseData): boolean;
    static removeJobsFromWaypoints(waypoints: WaypointData[], jobIndex: number): void;
    static removeShipmentsFromWaypoints(waypoints: WaypointData[], shipmentIndex: number): void;
    static removeEmptyWaypoints(waypoints: WaypointData[], legDataMap?: Map<string, RouteLegData>): {
        waypoints: WaypointData[];
        legs?: RouteLegData[];
        removedWaypointIndices: number[];
    };
    static buildLegDataMap(waypoints: WaypointData[], legs: RouteLegData[]): Map<string, RouteLegData>;
    static rebuildLegs(waypoints: WaypointData[], legDataMap: Map<string, RouteLegData>): RouteLegData[];
    static getLocationPairKey(from: [number, number], to: [number, number]): string;
    private static getWaypointLocation;
}
