import type { SelectRouteStrategy } from './here/here';
import type { GeoJSONSourceSpecification, LngLatBoundsLike } from 'maplibre-gl';
import type { FeatureCollection, Geometry, LineString } from '@turf/helpers';
import { LngLatPosition } from '../libre-routing';
export interface LibreRoutingDataProvider {
    request: (waypoints: any, opts: {
        selectRouteStrategy?: SelectRouteStrategy;
        alternatives: number;
        dragMode?: boolean;
    }) => Promise<LibreRoutingDataResponse>;
    destroy(): void;
    hasPendingRequests(): Promise<boolean>;
    abortAllRequests(): void;
}
export interface LibreRoutingDataResponse {
    rawResponse: any;
    routesShapeGeojson: GeoJSONSourceSpecification & {
        data: FeatureCollection<Geometry, {
            routeId: number;
            waypoint: number;
        }>;
    };
    routes: RouteSummary[];
    selectedRouteId?: number | null;
    routesShapeBounds?: LngLatBoundsLike;
}
export declare type RoutePath = LngLatPosition[];
export interface RouteSummary {
    id: number;
    label?: string;
    path: RoutePath;
    durationTime: number;
    arriveTime: Date;
    departureTime: Date;
    distance: number;
    cost?: number;
    waypoints: {
        lat: number;
        lng: number;
    }[];
    shape: FeatureCollection<LineString, {
        routeId: number;
        waypoint: number;
    }>;
}
export * from './here/here';
