#!/usr/bin/python
import cgi, cgitb, sqlite3, json
cgitb.enable()

#Functions
def dbExists():
    try:
        with open("coord.db") as f: pass
        return True
    except IOError:
        return False

def getDB():
    if dbExists():
        #Get the DB
        conn = sqlite3.connect("coord.db")
        return conn
    else:
        #Make the DB
        conn = sqlite3.connect("coord.db")
        c = conn.cursor()
        c.execute("""CREATE TABLE coords
                     (id real, x text, y text)""")
        c.execute("INSERT INTO coords VALUES (42, '0', '0')")
        conn.commit()
        c.close()
        return conn

def errorQuit(msgObj):
    print json.dumps(msgObj)
    raise SystemExit

#Main
vars = cgi.FieldStorage()

print "Content-Type: application/json"
print ""
action = vars.getvalue("action")
if action == "get":
    db = getDB()
    dbc = db.cursor()
    dbc.execute("SELECT * FROM coords WHERE id=42")
    res = dbc.fetchone()
    print json.dumps({"x":res[1], "y":res[2], "error":"", "success":"yes"})
    dbc.close()
elif action == "save":
    #Make sure we've been given coordinates and that they're numbers
    xCoord = vars.getvalue("x", "def")
    yCoord = vars.getvalue("y", "def")
    try:
        assert xCoord != "def"
        assert yCoord != "def"
        int(xCoord)
        int(yCoord)
    except AssertionError:
        errorQuit({"error":"one or both coords not defined"})
    except ValueError:
        errorQuit({"error":"one or both coords NaN"})
    #Now set the coords
    db = getDB()
    dbc = db.cursor()
    dbc.execute("DELETE FROM coords WHERE id=42")
    dbc.execute("INSERT INTO coords VALUES (42, ?, ?)", (xCoord, yCoord))
    db.commit()
    dbc.close()
    print json.dumps({"success":"yes"})
else:
    errorQuit({"error":"no action specified"})

