from time import *


xSize = 8
class recordHumanTime:
    def __init__(self):
        self.last_update = {}
	self.DB =  [ [] for i in range(6)]
	for i in range(6): 
	    self.DB[i]  = []

    def recordValue(self,time,value):
	self.recordValueAtLevel(5,(time,time,value) )

    def recordValueAtLevel(self,level,item):
	def makeItem(level,setOfItem):
	    (sum,nsum,minTime,maxTime) = (0,1,2222222222,0)
	    for x in setOfItem:
		(timeStart,timeEnd,value) = x
		(sum,nsum) = (sum+value , nsum+1)
		(minTime,maxTime) = ( min(minTime,timeStart), max(maxTime,timeEnd) )
	    return( (minTime,maxTime,sum/nsum) )

	def timePeriod(level,time):
	    ts = localtime(time)
	    nt = int(time)
	    if level < 5: nt = nt-ts[5]
	    if level < 4: nt = nt-ts[4]*60
	    if level < 3: nt = nt-ts[3]*60*24
	    if level < 2: nt = nt-ts[2]*60*24*30  # should it be 31?
	    if level < 1: nt = nt-ts[1]*60*24*30*12  # should it be 31?
	    return nt

	oldGuys = []
	(time,time2,value) = item
	ctp = timePeriod(level-1,time)
	for x in self.DB[level]:
	    (t1,t2,v) = x
	    ptp = timePeriod(level-1,t1)
	    if ptp < ctp: oldGuys.append(x)
	for x in oldGuys: self.DB[level].remove(x)
	if len(oldGuys) > 0 and level>0:
	    self.recordValueAtLevel(level-1,makeItem(level,oldGuys))
	self.DB[level].append(item)

	    
    def printIt(self):
	print "\n\nitems:"
	for level in range(6):
	    s = len(self.DB[level])
	    if s > 0:
		print "We have",s,"items at level",level
		for (t1,t2,v) in self.DB[level]:
		    print '<',strftime("%d/%m-%H:%M:%S",localtime(t1)),v,'>',
		print



if __name__ == '__main__':
    x = recordHumanTime()
    t = time()
    x.recordValue(t,1001)
    x.printIt()
    x.recordValue(t+1,1002)
    x.recordValue(t+2,1003)
    for i in range(60):
	x.recordValue(t+3+i,1004+i)
    x.printIt()

    for i in range(60):
	x.recordValue(100+t+3+i,2004+i)
    x.printIt()


    for i in range(60):
	x.recordValue(1000+t+3+i,3004+i)
    x.printIt()

    for i in range(600):
	x.recordValue(1200+t+3+i,4004+i)
    x.printIt()


    for i in range(600):
	x.recordValue(2100+t+3+i,5004+i)
    x.printIt()

    

