import time, json

def init_server():
    global title, choices, already_voted, started
    started = time.time()
    already_voted = {}
    title = u"What shall we eat?"
    choices = {u"Tacos": 0,\
               u"Pizza": 0,\
               u"Sushi": 0}
    print "Voting starts"

def vote_status():
    voting_closed = time.time() - started > 60
    results = []
    for choice, count in choices.items():
        results.append((count, choice))
    return voting_closed, max(results)

def process_json(query):
    voting_closed, winner = vote_status()
    if voting_closed:
        return {"closed": True, "winner": winner}

    msg = ""
    if "choice" in query:
        if query["voter"] in already_voted:
                msg = "You have voted already"
        else:
                choices[query["choice"]] += 1
                already_voted[query["voter"]] = True
                msg = "Thank you for your vote!"
        
    return {"title": title, "winner": winner,\
            "choices": choices, "msg": msg}

def process_get(path, query):
   voting_closed, winner = vote_status()
   msg = "<html><body><h1>Vote: %s</h1><br/>" % title
   for choice, count in choices.items():
       msg += "<b>%s</b> %d<br/>" % (choice, count)

   if voting_closed:
       msg += "<p><h2>Voting closed.</h2></p>"
       msg += "<h1>The winner is: %s</h1>" % winner[1]
   else:
       msg += "<h2>%d seconds until closing</h2>" %\
                    (60 - (time.time() - started))
   
   return "text/html", "%s</body></html>" % msg   

init_server()
httpd = Server(('', 9000), Handler)
httpd.serve_forever()