#!/usr/bin/python

import sys
import urllib2
import psycopg2
import sys
import ConfigParser
from xml.dom.minidom import parseString

def getText(nodelist):
	v = ""
	for node in nodelist:
		if node.nodeType == node.TEXT_NODE:
			v = v + node.data
	return v

def getData(elm, tagname):
	p = elm.getElementsByTagName(tagname)
	return getText(p[0].childNodes)

currency = ("USD", "GBP", "CHF", "JPY")

config = ConfigParser.ConfigParser()
config.read("db.cfg")

try:
	PG_HOST = config.get("postgres", "host")
	PG_USER = config.get("postgres", "user")
	PG_PASSWD = config.get("postgres", "passwd")
	PG_DATABASE = config.get("postgres", "database")

except (ConfigParser.NoSectionError, ConfigParser.NoOptionError), e:
	print "error: config: %s" % (str(e))
	sys.exit(1)

try:
	db = psycopg2.connect(host=PG_HOST, user=PG_USER, password=PG_PASSWD, database=PG_DATABASE)
except Exception, e:
	print "error: pgsql connect: %s" % (str(e))
	sys.exit(1)

if __name__ == "__main__":

	if len(sys.argv) < 2:
		print "usage: python gengi.py <yyyy-mm-dd>"
		sys.exit(1)

	dags = sys.argv[1]
	fields = dags.split('-')
	sdags = fields[2] + "." + fields[1] + "." + fields[0]

	f = urllib2.urlopen("http://www.sedlabanki.is/?PageID=289&dagur=" + sdags)
	data = f.read()
	f.close()

	doc = parseString(data)

	cursor = db.cursor()

	for mynt in doc.getElementsByTagName("mynt"):
		myntnafn = getData(mynt, "myntnafn")

		if myntnafn not in currency:
			continue

		kaupgengi = getData(mynt, "kaupgengi")
		midgengi = getData(mynt, "midgengi")
		solugengi = getData(mynt, "solugengi")

		cursor.execute("""
INSERT INTO gengi (
	dags,
	myntnafn,
	kaupgengi,
	midgengi,
	solugengi)
VALUES (%s,
	%s,
	%s,
	%s,
	%s)
		""", (dags, myntnafn, kaupgengi, midgengi, solugengi))

	db.commit()