const parseStopover = (ctx, st, date) => { // st = raw stopover const {profile, opt} = ctx; const cancelled = profile.parseCancelled(st); const arr = profile.parseWhen(ctx, date, st.ankunftsZeitpunkt || st.ankunftsDatum || st.arrivalTime?.target, st.ezAnkunftsZeitpunkt || st.ezAnkunftsDatum || st.arrivalTime?.timeType != 'SCHEDULE' && st.arrivalTime?.predicted, cancelled, ); const arrPl = profile.parsePlatform(ctx, st.gleis || st.track?.target, st.ezGleis || st.track?.prediction); const dep = profile.parseWhen(ctx, date, st.abfahrtsZeitpunkt || st.abgangsDatum || st.departureTime?.target, st.ezAbfahrtsZeitpunkt || st.ezAbgangsDatum || st.departureTime?.timeType != 'SCHEDULE' && st.departureTime?.predicted, cancelled, ); const depPl = arrPl; const res = { stop: profile.parseLocation(ctx, st.ort || st.station || st) || null, arrival: arr.when, plannedArrival: arr.plannedWhen, arrivalDelay: arr.delay, arrivalPlatform: arrPl.platform, arrivalPrognosisType: null, // TODO plannedArrivalPlatform: arrPl.plannedPlatform, departure: dep.when, plannedDeparture: dep.plannedWhen, departureDelay: dep.delay, departurePlatform: depPl.platform, departurePrognosisType: null, // TODO plannedDeparturePlatform: depPl.plannedPlatform, }; if (arr.prognosedWhen) { res.prognosedArrival = arr.prognosedWhen; } if (arrPl.prognosedPlatform) { res.prognosedArrivalPlatform = arrPl.prognosedPlatform; } if (dep.prognosedWhen) { res.prognosedDeparture = dep.prognosedWhen; } if (depPl.prognosedPlatform) { res.prognosedDeparturePlatform = depPl.prognosedPlatform; } const load = profile.parseLoadFactor(opt, st.auslastungsmeldungen || st.auslastungsInfos); if (load) { res.loadFactor = load; } // mark stations the train passes without stopping // TODO risNotizen key text.realtime.stop.exit.disabled? if (cancelled) { res.cancelled = true; Object.defineProperty(res, 'canceled', {value: true}); } // TODO res.additional = true; if (opt.remarks) { res.remarks = profile.parseRemarks(ctx, st); } return res; }; export { parseStopover, };