import couchdb
import datetime
import time
from uuid import uuid4
couch = couchdb.Server("http://127.0.0.1:5984/")
bus = couch["busjourneys"]
busstop = couch["busstops"]

def tdfloat(td):
    return float(td.seconds)

timestr = (datetime.datetime.now() + datetime.timedelta(hours=1)) . strftime("%H%M")
activejourneys = {}
results = bus.view("test/stopsbytime", key=timestr)
i = 0
for result in results:
    day = int(datetime.date.today().strftime("%w"))-1
    if day == -1: day = 6
    if result["id"] in activejourneys:
        print "C",
        continue
    journey = bus[result["id"]]
    print "T",
    print journey["days"][day],
    if journey["days"][day] == "1" and journey["term_time"] == "0":
        found = False
        stops = journey["stops"]
        while True:
            if stops[0]["t"] == result["key"]:
                newstops = []
                lasttime = "lies"
                j = 0.0
                tmpstops = []
                for nstop in stops:
                    if nstop["t"] != lasttime:
                        if lasttime == "lies": lasttime = result["key"]
                        k=0.0
                        for tstop in tmpstops:
                            tstop["time"] = ( datetime.datetime.combine(datetime.date.today(), datetime.datetime.strptime(lasttime, "%H%M").time()) + datetime.timedelta(minutes=k/j) )
                            k+=1.0
                            tstop["service"] = journey["route_number"]
                            newstops.append(tstop)
                        j=0.0
                        tmpstops = []
                    j+=1.0
                    if nstop["s"] in busstop:
                        thisstop = busstop[nstop["s"]]
                        try:
                            nstop["lat"] = thisstop["lat"]
                            nstop["lon"] = thisstop["lon"]
                        except KeyError: print "TopKeyError"
                    tmpstops.append(nstop)
                    lasttime = nstop["t"]
                
                print "-",
                activejourneys[journey["_id"]] = newstops
                break
            else:
                try: stops.pop(0)
                except IndexError: break

print "Go!"

while True:
    a=0
    time = ( datetime.datetime.now() + datetime.timedelta(hours=1) )
    for k,stops in activejourneys.items():
        try:
            while True:
                #print time, stops[1]["time"]
                if stops[1]["time"] < time:
                    stops.pop(0)
                else: break
            #print stops[1]["lon"]
            #print time, stops[0]["time"], stops[1]["time"]
            frac = tdfloat(time-stops[0]["time"]) / tdfloat(stops[1]["time"]-stops[0]["time"])
            print float(stops[0]["lat"])*(1-frac)+float(stops[1]["lat"])*(frac), float(stops[0]["lon"])*(1-frac)+float(stops[1]["lon"])*(frac)
            a+=1
        except IndexError: print "IndexError"
        except KeyError: print "KeyError"
    print a
    break

#print activejourneys
#print len(activejourneys)

