from datetime import datetime
udtInstPath = "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU01"


def getMeasurementPaths():
	return ["%s/Outside Air Dewpoint"%udtInstPath,
			"%s/Outside Air Temperature"%udtInstPath,
			"%s/Outside Air Humidity"%udtInstPath]
	
def getRawDataMeasurement(startDate, endDate, customArgs= {}):
	tagpaths = getMeasurementPaths()
	hist = reports.MBR.common.util.getHistory(tagpaths, startDate, endDate, customArgs={})
	
	
	return hist	

def getRawChillerDemand(startDate, endDate, location,  customArgs= {}):
	tagpaths = reports.MBR.common.util.getBaseTagPaths(reports.MBR.common.static.getChillerTonnage(), location)
	tagpaths.sort()
	hist = reports.MBR.common.util.getHistory(tagpaths, startDate, endDate, customArgs={})
	
	return hist
	
def calculateValues(data):
	"""
		Calculate the Daily Average of each sensor's measurement
	"""
	data = system.dataset.toPyDataSet(data)
	curHeaders = system.dataset.getColumnHeaders(data)
	res = {"ResultTemp":None, "ResultHumidity":None}
	dailyGroup= {}
	allResultData = {}
	allResultDS = {}
	allAvgs = []

	for row in data:
		dayStr = system.date.format(row["t_stamp"],"yyyy-MM-dd")
		dailyGroup.setdefault(dayStr, {})
		dailyGroup[dayStr].setdefault("OATemp", [])
		dailyGroup[dayStr].setdefault("OADew", [])
		dailyGroup[dayStr].setdefault("OAHum", [])
		
		dailyGroup[dayStr]["OADew"].append(row[curHeaders[1]])
		dailyGroup[dayStr]["OATemp"].append(row[curHeaders[2]])
		dailyGroup[dayStr]["OAHum"].append(row[curHeaders[3]])

	sortedDateKeys = sorted(dailyGroup.keys(), key=lambda x: datetime.strptime(x, '%Y-%m-%d'))
	temperatureRows= []
	humidityRows= []
	for date_str in sortedDateKeys:
		try:
			dpAvg = sum(dailyGroup[date_str]["OADew"])/len(dailyGroup[date_str]["OADew"])
			tempAvg = sum(dailyGroup[date_str]["OATemp"])/len(dailyGroup[date_str]["OATemp"])
			humAvg = sum(dailyGroup[date_str]["OAHum"])/len(dailyGroup[date_str]["OAHum"])
		except:
			dpAvg = 0
			tempAvg = 0
			humAvg = 0
		
		temperatureRows.append([system.date.parse(date_str, "yyyy-MM-dd"), dpAvg, tempAvg])
		humidityRows.append([system.date.parse(date_str, "yyyy-MM-dd"), humAvg])

	res["ResultTemp"] = system.dataset.toDataSet(["Date","Dewpoint","Temperature"], temperatureRows)	
	res["ResultHumidity"] = system.dataset.toDataSet(["Date","Humidity"], humidityRows)
	return res	

def DoAll(startDate,endDate):
	return calculateValues(getRawDataMeasurement(startDate,endDate))

def DoChillerDemand(startDate, endDate, interval= 60, locations=None):
	histDS = reports.MBR.cooling.getRawChillerDemand(startDate, endDate, locations,  customArgs= {})
	histDS = reports.MBR.common.util.averageIntervalData(histDS, interval)
	histDS = reports.MBR.common.util.generateSumCol(histDS, sumColName="Sum Tonnage")

	return {"histDS":histDS}
	