#!/usr/bin/python

import sys
import os
import re
import sqlite3

gmnpoint = re.compile('^<point type="304" (.*)/>$')
tstamp = re.compile('([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}:[0-9]{2}).*')
parameter = re.compile('[a-z]+="(.*)"')

def parsegmn(ID, gmn, conn):
    c = conn.cursor()
    pipe = os.popen("/usr/bin/garmin_dump "+gmn, "r")
    while 1:
        line = pipe.readline()
        if not line:
            break
        # print line
        if gmnpoint.match(line):
            txt = gmnpoint.sub(r"\1", line[:-1])
            # print txt
            params = txt.split(" ")
            if len(params) == 5:
                for i in range(5):
                    params[i] = parameter.sub(r"\1", params[i])
                    if i == 0:
                        params[i] = tstamp.sub(r"\1 \2", params[i])
                    else:
                        params[i] = float(params[i])
                    # print params[i]
                query = "INSERT INTO gmn VALUES "
                query = query + "(%d,'%s',%f,%f,%f,%f);" % \
                        (ID,params[0],params[1],params[2],params[3],params[4])
                print query
                c.execute(query)
    conn.commit()
    c.close()

if __name__ == "__main__":
    if len(sys.argv) > 2:
        title = sys.argv[1]
        gmn = sys.argv[2]
        bn = os.path.basename(gmn)
        date = bn[0:4]+"-"+bn[4:6]+"-"+bn[6:11]+":"+bn[11:13]+":"+bn[13:15]
        conn = sqlite3.connect('jogging.db')
        c = conn.cursor()
        query = "INSERT INTO rounds VALUES (NULL,'%s','%s');" % (date, title)
        print query
        c.execute(query)
        conn.commit()
        query = "SELECT MAX(id) FROM rounds;"
        c.execute(query)
        row = c.fetchone()
        ID = int(row[0])
        c.close()
        parsegmn(ID, gmn, conn)
    else:
        print "usage: %s <name> <gmn-file>" % (sys.argv[0])
        sys.exit(1)
