private static List<BusArrivalTime> InterleaveRouteScheduleAndEstimates(BusStopRouteSchedule routeSchedule,
Dictionary<string, List<int>> stopEstimates, DateTimeOffset currentTime)
{
var arrivalTimes = Enumerable.Empty<BusArrivalTime>();
var daySchedule = routeSchedule.DaySchedules.FirstOrDefault(ds => DaysOfWeekUtils.IsToday(ds.Days, currentTime));
if (daySchedule != null)
{
var relativeSchedule = MakeRelativeScheduleWithinCutoff(daySchedule, currentTime);
arrivalTimes = relativeSchedule.Select(minutes => new BusArrivalTime(minutes, isEstimate: false));
}
if (stopEstimates.ContainsKey(routeSchedule.RouteNo))
{
var routeEstimates = stopEstimates[routeSchedule.RouteNo];
arrivalTimes = arrivalTimes.Where(arrivalTime =>
!routeEstimates.Any(estimate =>
Math.Abs(arrivalTime.MinutesFromNow - estimate) <= ESTIMATE_CORRELATION_TOLERANCE_MINUTES));
arrivalTimes = arrivalTimes.Concat(
routeEstimates.Select(estimate => new BusArrivalTime(estimate, isEstimate: true)));
}
arrivalTimes = arrivalTimes.OrderBy(arrivalTime => arrivalTime);
return arrivalTimes.ToList();
}