import { RunTripsRedisRepository } from "../../../../../ropid-gtfs/data-access/cache";
import { CommonRunsRepository } from "../../../runs/data-access/CommonRunsRepository";
import { IExtendedMetroRunInputForProcessing } from "../../../runs/interfaces/IMetroRunInputForProcessing";
import { IRegionalBusRunInputWithMetadata } from "../../../runs/interfaces/IRegionalBusRunInputWithMetadata";
import { IVehiclePositionsSchedule } from "../../interfaces/VPInterfaces";
import { IScheduleDto } from "../../../../../../schema-definitions/vehicle-positions/redis/interfaces/IGtfsRunTripCacheDto";
import { ISimpleConfig } from "@golemio/core/dist/helpers/configuration/ISimpleConfig";
import { ILogger } from "@golemio/core/dist/helpers/logger";
import { Moment } from "@golemio/core/dist/shared/moment-timezone";
import { PositionsRepository } from "../../data-access/PositionsRepository";
import { TripsRepository } from "../../data-access/TripsRepository";
import { IUpdateRunsGtfsTripInput } from "../../interfaces/IUpdateRunsGtfsTripInput";
import { IDelayMessage } from "./interfaces/IDelayMessage";
export declare abstract class AbstractGTFSTripRunManager {
    protected readonly positionsRepository: PositionsRepository;
    protected readonly tripsRepository: TripsRepository;
    protected readonly runsRepository: CommonRunsRepository;
    protected readonly runTripsRedisRepository: RunTripsRedisRepository;
    protected readonly testMode: boolean;
    protected CURRENT_TRIP_START_TIME_WINDOW_IN_MS: number;
    protected config: ISimpleConfig;
    protected logger: ILogger;
    private turnaroundEstimateInSeconds;
    constructor(positionsRepository: PositionsRepository, tripsRepository: TripsRepository, runsRepository: CommonRunsRepository, runTripsRedisRepository: RunTripsRedisRepository, testMode?: boolean);
    abstract generateDelayMsg(schedule: IScheduleDto[], input: IUpdateRunsGtfsTripInput | IExtendedMetroRunInputForProcessing | IRegionalBusRunInputWithMetadata): Promise<IDelayMessage>;
    setAndReturnScheduledTrips: (scheduleData: IVehiclePositionsSchedule) => Promise<IScheduleDto[]>;
    protected determineCurrentTripFromTimestamp(schedule: IScheduleDto[], timestampScheduled: Moment): IScheduleDto | undefined;
    protected determineCurrentTripFromTripId(schedule: IScheduleDto[], gtfsTripId: string | undefined): IScheduleDto | undefined;
    /**
     * Get scheduled trips adjacent to run message timestamp (scheduled)
     *   originally based on route id and run number
     */
    protected getAdjacentTrips(schedule: IScheduleDto[], timestampScheduled: Moment, currentTripId: string | undefined): IScheduleDto[];
    protected abstract getAdjacentTripTimeWindow(): ITimeWindow;
    private isTripAdjacent;
    private isSameStop;
}
