export type ViewMode = 'active' | 'storage' | 'journal'; export interface ActiveData { trains: ActiveTrain[]; activeSceneries: ActiveScenery[]; } export interface ActiveTrain { id: string; trainNo: number; mass: number; speed: number; length: number; distance: number; stockString: string; driverName: string; driverId: number; driverIsSupporter: boolean; driverLevel: number; currentStationHash?: string; currentStationName: string; signal: string; connectedTrack: string; online: number; lastSeen: number; region: string; isTimeout: boolean; timetable?: ActiveTrainTimetable; } export interface ActiveTrainTimetable { SKR: boolean; TWR: boolean; hasDangerousCargo: boolean; hasExtraDeliveries: boolean; warningNotes: string; category: string; stopList: TimetableStop[]; route: string; timetableId: number; sceneries: string[]; path: string; trainMaxSpeed: number; } export interface TimetableStop { stopName: string; stopNameRAW: string; stopType: string; stopDistance: number; pointId: string; comments?: string; mainStop: boolean; arrivalLine?: string; arrivalTimestamp: number; arrivalRealTimestamp: number; arrivalDelay: number; departureLine?: string; departureTimestamp: number; departureRealTimestamp: number; departureDelay: number; beginsHere: boolean; terminatesHere: boolean; confirmed: number; stopped: number; stopTime?: number; } export interface ActiveScenery { dispatcherId: number; dispatcherName: string; dispatcherIsSupporter: boolean; stationName: string; stationHash: string; region: string; maxUsers: number; currentUsers: number; spawn: number; lastSeen: number; dispatcherExp: number; nameFromHeader: string; spawnString?: string; networkConnectionString: string; isOnline: number; dispatcherRate: number; dispatcherStatus: number; } export interface SceneryData { createdAt: string; updatedAt?: string; id: number; name: string; SUP: boolean; authors: string; availability: string; backupJSON: any; checkpoints?: string; controlType: string; lines?: string; project?: string; reqLevel: number; routes?: string; routesInfo: SceneryRoute[]; signalType: string; supportersOnly?: boolean; url?: string; projectUrl?: string; hash?: string; abbr: string; hidden: boolean; ASDEK: boolean; hashHistory: string[]; } export interface SceneryRoute { routeName: string; isElectric: boolean; isInternal: boolean; isRouteSBL: boolean; routeSpeed: number; routeLength: number; routeTracks: number; hidden?: boolean; realLineNo?: number; } export interface StopRow { pointName: string; pointKm: string; isMain: boolean; stopTime: number; stopType: string; scheduledArrivalDate: Date | null; scheduledDepartureDate: Date | null; realLine: string; driveTime: number; abbrevs: string[]; sceneryName: string; arrivalKm: string; arrivalSpeed: number; arrivalTracks: number; departureKm: string; departureSpeed: number; departureTracks: number; headUnits: string[]; stockVmax: number; stockLength: number; stockMass: number; } export interface StopRowCZ { pointName: string; pointKm: string; isMain: boolean; stopTime: number; stopType: string; scheduledArrivalDate: Date | null; scheduledDepartureDate: Date | null; driveTime: number; sceneryName: string; arrivalSpeed: number; departureSpeed: number; arrivalTracks: number; departureTracks: number; headUnits: string[]; stockVmax: number; stockLength: number; stockMass: number; arrivalDateStr: string; departureDateStr: string; } export interface TimetablePathData { sceneryName: string; sceneryData: SceneryData | null; arrivalLine: string; departureLine: string; arrivalLineData: SceneryRoute | null; departureLineData: SceneryRoute | null; } export interface JournalTimetableShort { id: number; allStopsCount: number; confirmedStopsCount: number; createdAt: string; beginDate: string; driverId: number; driverName: string; route: string; routeDistance: number; currentDistance: number; currentLocation: string[]; currentSceneryName: string; currentSceneryHash: string; driverLevel: number; fulfilled: boolean; terminated: boolean; driverIsSupporter: boolean; trainCategoryCode: string; trainNo: number; region: string; hasDangerousCargo: boolean; hasExtraDeliveries: boolean; twr: boolean; skr: boolean; } export interface JournalTimetableDetailed extends JournalTimetableShort { id: number; schemaVersion: string; allStopsCount: number; authorId: number; authorName: string; beginDate: string; confirmedStopsCount: number; currentDistance: number; driverId: number; driverName: string; endDate: string; fulfilled: boolean; route: string; routeDistance: number; region: string; sceneriesString: string; scheduledBeginDate: string; scheduledEndDate: string; terminated: boolean; timetableId: number; trainCategoryCode: string; trainNo: number; twr: boolean; skr: boolean; stockString: string; stockMass: number; stockLength: number; maxSpeed: number; trainMaxSpeed: number; hashesString: string; currentSceneryName: string; currentSceneryHash: any; driverIsSupporter: boolean; driverLevel: number; createdAt: string; updatedAt: string; stockHistory: string[]; routeSceneries: string; checkpointArrivals: any[]; checkpointDepartures: any[]; checkpointArrivalsScheduled: string[]; checkpointDeparturesScheduled: string[]; checkpointStopTypes: string[]; currentLocation: string[]; visitedSceneries: string[]; sceneryHashes: string[]; sceneryNames: string[]; checkpointComments: string[]; checkpointNames: string[]; path: string; warningNotes: string; hasDangerousCargo: boolean; hasExtraDeliveries: boolean; stopListString?: string; } export interface TimetableData { trainNo: number; mass: number; length: number; driverName: string; driverId: number; hasDangerousCargo: boolean; hasExtraDeliveries: boolean; warningNotes: string; category: string; route: string; timetableId: number; path: string; trainMaxSpeed: number; stopListString: string; headUnits: string[]; savedTimestamp?: number; journalCreatedAt?: number; }