import { Moment } from "@golemio/core/dist/shared/moment-timezone";
import { IStop, ITransferOutputDto, IV4TransferDto, TransferStops, TripsToTransfers } from "../..";
import { DeparturesRepository } from "../../data-access";
import { DelayComputationRepository } from "../../../public/data-access/redis/DelayComputationRepository";
import { PublicGtfsDepartureRepository } from "../../../public/data-access/redis/PublicGtfsDepartureRepository";
import { PublicStopTimeRepository } from "../../../public/data-access/redis/PublicStopTimeRepository";
import { PublicVehiclePositionsRepository } from "../../../public/data-access/redis/PublicVehiclePositionsRepository";
import { TransferDepartureTransformation } from "../transformations/TransferDepartureTransformation";
export type FilterTripToStops = {
    currentLine: TransferStops;
    currentStop: IStop;
    otherLinesMap: TripsToTransfers;
    tripsToKeep: Set<string>;
};
export type FilterSpecificOptions = {
    previousCountMax: number;
};
export type LineFilterDto = {
    data: FilterTripToStops;
    options: FilterSpecificOptions;
};
export type LineFilterFn = (params: LineFilterDto) => Promise<LineFilterDto>;
export declare class TransferFacade {
    private publicDepartureRepository;
    private departuresRepository;
    private departureTransformation;
    private tripRepository;
    private stopTimeRepository;
    private delayComputationRepository;
    private static readonly MINUTE_AS_MS;
    private static readonly OPEN_MINUTES_IN_PAST;
    private static readonly OPEN_MINUTES_IN_PAST_MS;
    constructor(publicDepartureRepository: PublicGtfsDepartureRepository, departuresRepository: DeparturesRepository, departureTransformation: TransferDepartureTransformation, tripRepository: PublicVehiclePositionsRepository, stopTimeRepository: PublicStopTimeRepository, delayComputationRepository: DelayComputationRepository);
    getTransferDepartures(stopIds: string[], tripNumber: string | null, currentMoment: Moment, minutesOffset: number, timeZone?: string): Promise<ITransferOutputDto[]>;
    private static sortByDepartureTime;
    private static isDifferentLine;
    private static jsonPathDataToLineFilterStop;
    private calculateTimeFrom;
    getTransferCache(stopId: string, stopIds: string[], limit: number, reqNumber: number, vehicleType: number, timeFrom: Date): Promise<IV4TransferDto>;
    private static findStopTimeByStopId;
    private findVehicleArrival;
    private processMultiplePositionsForDeparturesAtOnce;
    private static findPreviousStopId;
    private static isOtherEndNearCurrent;
    private static isOtherSubsetOfCurrent;
    private static isOppositeDirection;
    private static filterOutForwardSubgroupOfLine;
    private static filterOutLinesWithBacktrackingConflict;
    private static applyFiltersSequentially;
    private static rawTripLinesEntriesToTransfersMap;
    findRelevantTripIdsFromLines(otherLinesTripIdsFromDelay: Set<string>, currentStopInput: IStop, currentTripId: string, stopTimeIds: string[][], previousCountMax?: number): Promise<string[]>;
    /**
     * Fallback options as defined by ROPID
     */
    private get defaultOptions();
}
