#!/usr/bin/python

import mechanize
import socket
import lxml.html
import lxml
import math
import sys
import os
import re

debug = False
dump = False

sys.path.append(os.path.expanduser('~/.optus-settings'))
from config import *

b = mechanize.Browser()
b.set_handle_refresh(False)
b.set_handle_robots(False)

if debug:
	b.set_debug_redirects(True)
	b.set_debug_responses(True)
	b.set_debug_http(True)

	if dump:
		import logging
		logger = logging.getLogger("mechanize")
		logger.addHandler(logging.StreamHandler(sys.stdout))
		logger.setLevel(logging.INFO)

b.open('https://memberservices.optuszoo.com.au/myusage/')

for form in b.forms():
  if form.method == 'POST':
    b.form = form

b['j_username'] = username
b['j_password'] = password

try:
  r = b.submit()
except mechanize.HTTPError:
  pass

r = b.open('https://memberservices.optuszoo.com.au/myusage/blah')
r = lxml.html.parse(r).getroot()

peak_used = "//td[@headers='planDataU']"
#offpeak_used = "//td[@headers='yesDataU']"
peak_quota = "//td[@headers='planDataAlwd']"
#offpeak_quota = "//td[@headers='yesdataAl']"
days_used = "//td[@headers='daysUsed']"
days_percent = "//td[@class='label' and contains(., 'Days Elapsed')]"
days_percent_r = r"Days Elapsed ([0-9]*)%\s*.*"
date = "//td[text()='Last Update:']/following-sibling::td"
#billing = "//td[text()='Billing Period:']/following-sibling::td"
usage = "//td[text()='Usage Period:']/following-sibling::td"
s = 'string()'

#peak_used = int(r.xpath(peak_used)[0].xpath(s))
peak_used = int(r.xpath(peak_used)[2].xpath(s))
#offpeak_used = int(r.xpath(offpeak_used)[0].xpath(s))
peak_quota = int(r.xpath(peak_quota)[0].xpath(s))
#offpeak_quota = int(r.xpath(offpeak_quota)[0].xpath(s))
days_used = int(r.xpath(days_used)[0].xpath(s))
days_percent = r.xpath(days_percent)[0].xpath(s)
days_percent = int(re.sub(days_percent_r, r"\1", days_percent))
date = str(r.xpath(date)[0].xpath(s))
#billing = str(r.xpath(billing)[0].xpath(s))
usage = str(r.xpath(usage)[0].xpath(s))

try:
	print 'peak: %s/%s (%s%%)' % (peak_used, peak_quota, int(peak_used*100/peak_quota))
except ZeroDivisionError:
	print 'peak: %s/%s' % (peak_used, peak_quota)
#print 'off-peak: %s/%s (%s%%)' % (offpeak_used, offpeak_quota, int(offpeak_used*100/offpeak_quota))
try:
	print 'days: %s/%s (%s%%)' % (days_used, int(days_used*100.0/days_percent), days_percent)
except ZeroDivisionError:
	print 'days: %s (%s%%)' % (days_used, days_percent)
print 'date: %s' % date
#print 'billing: %s' % billing
print 'usage: %s' % usage

b.follow_link(url_regex=r'logout', nr=1)
