import { POIOrIDOrPosition } from './NavigationRequest';
import { NavigationRequestType } from './NavigationRequestType';

/**
 * Request to provide to "computeNavigation".
 */
export interface NavigationRequestMultiDestination {
    /**
     * Start of the route.
     */
    readonly origin: POIOrIDOrPosition;
    /**
     * Start of the route.
     */
    readonly destinations: POIOrIDOrPosition[];
    /**
     * When true, the request will return the best solution to navigate from origin to the last specified destination.
     * It will test factorial times the number of destinations minus one.
     * When false, the request will pass the destinations in order.
     */
    readonly optimize?: boolean;
    /**
     * Influence the behavior of the route calculation algorithm,
     * @see {@link NavigationRequestType}
     * @defaultValue 'fastest'
     */
    readonly type?: NavigationRequestType;
    /**
     * If set to true, computed route will only use accessible route.
     * @defaultValue false
     */
    readonly isAccessible?: boolean;
    /**
     * This flag indicates if a "turn right" or "turn left" instruction will be generated when the Navigation leave the first POI.
     * @defaultValue false
     */
    readonly firstNodeAsIntersection?: boolean;
    /**
     * This flag allows to disable generation of change floor, change modality or "arrived to destination" instructions.
     * @defaultValue true
     */
    readonly mergeFloorChangeInstructions?: boolean;
    /**
     * As segment can have several modalities, you may exclude some of them.
     * Modality is a way to go along a segment (pedestrian, bus...), defined in VisioMapEditor.
     */
    readonly excludedModalities?: string[];
    /**
     * As segment can have several attributes, you may exclude some of them.
     * Attributes is a particularity of a segment (elevator, stairway, intersection...), defined in VisioMapEditor.
     */
    readonly excludedAttributes?: string[];
}
