public ServerBusSchedule CreateSchedule()
{
var googleRouteSchedules = GoogleTransitClient.GoogleTransitData.Schedules.ToDictionary(schedule => schedule.ConnexionzName);
var routes = ConnexionzClient.Routes.Value.Where(r => r.IsActive && googleRouteSchedules.ContainsKey(r.RouteNo));
// Build all the schedule data for intermediate stops.
var routeSchedules = routes.Select(r => new
{
routeNo = r.RouteNo,
daySchedules = googleRouteSchedules[r.RouteNo].Days.Select(
d => new
{
days = d.Days,
stopSchedules = InterpolateSchedule(r, d.StopSchedules)
})
});
// Now turn it on its head so it's easy to query from a stop-oriented way.
var platforms = ConnexionzClient.Platforms.Value;
var result = platforms.ToDictionary(p => p.PlatformNo,
p => routeSchedules.Select(r => new BusStopRouteSchedule
{
RouteNo = r.routeNo,
DaySchedules = r.daySchedules.Select(ds => new BusStopRouteDaySchedule
{
Days = ds.days,
Times = ds.stopSchedules.FirstOrDefault(ss => ss.Item1 == p.PlatformNo)?.Item2
})
.Where(ds => ds.Times != null)
.ToList()
})
.Where(r => r.DaySchedules.Any())
);
return result;
}
}