#!/usr/bin/python

import csv
import lzma
import sys
import os
from datetime import date

n_returns = 600
sensorlist = [1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20]


frm = sys.argv[1]
to  = sys.argv[2]
div = sys.argv[3]

frm_y, frm_m, frm_d = [int(x) for x in frm.split('/')]
to_y,  to_m,  to_d  = [int(x) for x in  to.split('/')]

frm = date(frm_y, frm_m, frm_d)  # align for naughty input
to  = date(to_y, to_m, to_d)     # align for naughty input
 
# retreive from database
# first, calculate culling idx
samples_per_day = 24 * 6
ndays = (to - frm).days * samples_per_day
step  = int(ndays / n_returns) + 1

result = []
while frm.year < to.year or frm.month <= to.month:
	tmplist = []
	for i in sensorlist:
		no = str(i)
		fname = "/home/tutimura/public_html/cgi-bin/ondotori/data/"+ no+
		        "/"+frm.strftime("%Y%m")+".csv.xz"
		try:
			xz = lzma.LZMAFile(fname)
			r1 = csv.DictReader(xz, fieldnames=["datetime", "temp-"+no, "humid-"+no])
			frm_s = frm.strftime("%Y/%m/%d 00:00")
			to_s  = to.strftime("%Y/%m/%d 00:00")
			tmp=filter(lambda x: x["datetime"] >= frm.strftime("%Y/%m/%d") + " 00:00" 
				and x["datetime"] <= to + " 23:59", r1)
			if tmp == []: continue
			tmplist.append(tmp[::step])
		except IOError:
			break
	result += [x for s in zip(*tmplist) for x in s]

	frm_m += 1
	if frm_m > 12:
		frm_y += 1
		frm_m = 1

# align on 10 minite
for i in range(len(result)):
	result[i]["datetime"] = result[i]["datetime"][:-1]+"0"
	
#result.sort(key=lambda x: x["datetime"])  # maybe not needed

# gather all sensors
prev=""
fa = []
for entry in result:
	if entry["datetime"] == prev:
		fa[-1] = {k: v for dic in [entry, fa[-1]]
			for k, v in dic.items()}
	else:
		fa.append(entry)
	prev = entry["datetime"]

# cull data to fit about 2000 entries
print (fa)
print fa

