import { IEta, IOrderedStop, IRoute, IShuttle, IStop } from "../../entities/ShuttleRepositoryEntities"; import type EventEmitter from "node:events"; export const ShuttleRepositoryEvent = { ETA_UPDATED: "etaUpdated", ETA_REMOVED: "etaRemoved", ETA_DATA_CLEARED: "etaDataCleared", } as const; export type ShuttleRepositoryEventName = typeof ShuttleRepositoryEvent[keyof typeof ShuttleRepositoryEvent]; export type EtaRemovedEventPayload = IEta; export type EtaDataClearedEventPayload = IEta[]; export interface ShuttleRepositoryEventPayloads { [ShuttleRepositoryEvent.ETA_UPDATED]: IEta; [ShuttleRepositoryEvent.ETA_REMOVED]: EtaRemovedEventPayload; [ShuttleRepositoryEvent.ETA_DATA_CLEARED]: EtaDataClearedEventPayload; } export type ShuttleRepositoryEventListener = ( payload: ShuttleRepositoryEventPayloads[T], ) => void; export interface ShuttleStopArrival { stopId: string; timestamp: Date; } export interface ShuttleTravelTimeDataIdentifier { routeId: string; fromStopId: string; toStopId: string; } export interface ShuttleTravelTimeDateFilterArguments { from: Date; to: Date; } /** * Shuttle getter repository to be linked to a system. */ export interface ShuttleGetterRepository extends EventEmitter { getStops(): Promise; getStopById(stopId: string): Promise; getRoutes(): Promise; getRouteById(routeId: string): Promise; getShuttles(): Promise; getShuttleById(shuttleId: string): Promise; getShuttlesByRouteId(routeId: string): Promise; getEtasForShuttleId(shuttleId: string): Promise; getEtasForStopId(stopId: string): Promise; getEtaForShuttleAndStopId(shuttleId: string, stopId: string): Promise; on(event: T, listener: ShuttleRepositoryEventListener): this; once(event: T, listener: ShuttleRepositoryEventListener): this; off(event: T, listener: ShuttleRepositoryEventListener): this; addListener(event: T, listener: ShuttleRepositoryEventListener): this; removeListener(event: T, listener: ShuttleRepositoryEventListener): this; getOrderedStopByRouteAndStopId(routeId: string, stopId: string): Promise; /** * Get ordered stops with the given stop ID. * Returns an empty array if no ordered stops found. * @param stopId */ getOrderedStopsByStopId(stopId: string): Promise; /** * Get ordered stops with the given route ID. * Returns an empty array if no ordered stops found. * @param routeId */ getOrderedStopsByRouteId(routeId: string): Promise; /** * Get the last stop arrival for a shuttle. * Returns undefined if no last stop arrival has been recorded. * @param shuttleId */ getShuttleLastStopArrival(shuttleId: string): Promise; /** * Check if a shuttle has arrived at a stop within the given delta. * Returns the stop if the shuttle is at a stop, otherwise undefined. * @param shuttle * @param delta - The coordinate delta tolerance (default 0.001) */ getArrivedStopIfExists(shuttle: IShuttle, delta?: number): Promise; }