#!/usr/bin/env python

import csv
import pprint,sys
from datetime import date
from optparse import OptionParser

class BridgeCSV:
	def __init__(self):
		fp = open('bridge-users.csv', 'r')
		self.bridgeReader = csv.reader(fp,delimiter=',')
		self.names = self.bridgeReader.next()
		self.minimum = 40
		self.data = []

	def read(self):
		for row in self.bridgeReader:
			self.data.append(row)

	def get_date(self, date):
		for row in self.data:
			if(row[0] == date):
				return row
		return False

	def anomaly(self, row1, row2, fact):
		if(row1 == False or row2 == False):
			a = 0
			#print "ERROR!"
		else:
			for i in range(1,len(row1)):
				if(row1[i] != "NA" and row2[i] != "NA"):
					if(int(row2[i]) > self.minimum and int(row1[i]) > self.minimum): 
						if(float(row2[i]) > float(row1[i])):
							#print "%s %s %s 1: %s 2: %s (%s)" % (float(row2[i])/float(row1[i]),row1[0],row2[0],row1[i],row2[i],self.names[i])
							if(float(row2[i])/float(row1[i]) > float(fact)):
								print "%s | %s %s 1: %s 2: %s (%s)" % (float(row2[i])/float(row1[i]),row1[0],row2[0],row1[i],row2[i],self.names[i])
						else:
							if(float(row1[i])/float(row2[i]) > float(fact)):
								print "%s | %s %s 1: %s 2: %s (%s)" % (float(row1[i])/float(row2[i]),row1[0],row2[0],row1[i],row2[i],self.names[i])
			

	def print_row(self, row):
		if(row == False):
			print "error no data found!"
			return False
		for i in range(0,len(row)):
			print "%s: %s" % (self.names[i],row[i])

a = BridgeCSV()
a.read()

parser = OptionParser()
parser.add_option("-s", "--start", dest="startdate",
                  help="Start date in format X day after 1. 1. 0001", default=734000)
parser.add_option("-e", "--end",
                  dest="enddate",
                  help="End date in format X day after 1. 1. 0001", default=734300)
parser.add_option("-p", "--period",
									help="timeframe to use when looking for anomalies", dest="period", default=30)

parser.add_option("-f", "--factor",
									help="The factor to use when detecting anomalies, low factor means sensitive, factor < 1 looks for decreases", dest="factor",
									default=3)

(options, args) = parser.parse_args()


print "Analysing from %s to %s" % (date.fromordinal(options.startdate).strftime("%Y-%m-%d"),date.fromordinal(options.enddate).strftime("%Y-%m-%d"))
print "using a factor of %s and a timeframe of %s" % (options.factor, options.period)

for i in range(options.startdate,options.enddate):
	for j in range(i-options.period,i):
		date1 = date.fromordinal(i).strftime("%Y-%m-%d")
		date2 = date.fromordinal(j).strftime("%Y-%m-%d")
		#print "%s %s"  % (date1,date2)
		a.anomaly(a.get_date(date1),a.get_date(date2),options.factor)
#a.print_row(a.get_date("2010-12-10"))




