import { Position } from '../Core';
import { POI } from '../Venue';
import { NavigationRequestType } from './NavigationRequestType';

/**
 * The POIOrIDOrPosition type is used to specify either a POI, it's ID or a geographical position.
 * It will be used as origin or destination for a NavigationRequest.
 */
export type POIOrIDOrPosition = 
/**
 * Allows to specify a POI as origin or destination.
 */
POI | 
/**
 * Allows to specify a POI's ID as origin or destination.
 */
string | 
/**
 * Allows to specify a geographical position as origin or destination.
 * Using a Position will use the projected point on the nearest routing edge.
 */
Position;
/**
 * Request to provide to "computeNavigation".
 */
export interface NavigationRequest {
    /**
     * Start of the route.
     */
    readonly origin: POIOrIDOrPosition;
    /**
     * Change the way the Navigation's Lines will be rendered.
     */
    /**
     * Start of the route.
     */
    readonly destination: POIOrIDOrPosition;
    /**
     * 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[];
}
