penguin/golifehk

@golifehk bot in Telegram

datasources/mtr/bus/query.go

raw ยท 1390 bytes

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{}
        for _, entry := range *qBusStops.Results {
            busStop := any( entry ).( *BusStop )

            for _, busStopSch := range schedules.BusStops {
                if busStopSch.BusStopId == busStop.StationId {
                    matches[busStop] = &busStopSch
                    break
                }
            }

        }

        qr.Schedules = &matches
    }

    qrReturn:
    var iqr query.IQueryResult
    iqr = &qr
    return iqr
}