package bus import ( "strings" query "github.com/tgckpg/golifehk/query" ) func Query(lang string, message string) query.IQueryResult { var qBusStops *query.QueryObject var err error qr := QueryResult{Lang: lang} busStops, err := getBusStops() if err != nil { qr.Error = err goto qrReturn } qBusStops, err = query.Parse(strings.ToUpper(message), busStops) if err != nil { qr.Error = err goto qrReturn } qr.Query = qBusStops if 0 < len(*qBusStops.Results) && 1 < len(*qBusStops.SearchTerms) { schedules, err := getSchedule(lang, qBusStops.Key) if err != nil { qr.Error = err goto qrReturn } if len(schedules.BusStops) == 0 { qr.Schedules = &map[*BusStop]*BusStopBuses{} goto qrReturn } matches := map[*BusStop]*BusStopBuses{} sMatches := map[*BusStop]*BusStopBuses{} for _, entry := range *qBusStops.Results { busStop := any(entry).(*BusStop) for _, busStopSch := range schedules.BusStops { if busStopSch.BusStopId == busStop.StationId { if busStop.RouteId != busStop.ReferenceId { sMatches[busStop] = &busStopSch continue } matches[busStop] = &busStopSch break } } } if len(matches) == 0 && 0 < len(sMatches) { matches = sMatches } qr.Schedules = &matches } qrReturn: var iqr query.IQueryResult iqr = &qr return iqr }