import sqlite3
from datetime import date
import psycopg2
from NEWAFireInfo.settings import DATABASES

def daterollback(x):
    if x[4:6] == '01':
        x = str(int(x[:4])-1) + '1231'
    elif x[4:6] == '02':
        x = str(int(x[:4])) + '0131'
    elif x[4:6] == '03':
        if int(x[:4]) % 4 == 0:
            x = str(int(x[:4])) + '0229'
        else:
            x = str(int(x[:4])) + '0228'
    elif x[4:6] == '04':
        x = str(int(x[:4])) + '0331'
    elif x[4:6] == '05':
        x = str(int(x[:4])) + '0430'
    elif x[4:6] == '06':
        x = str(int(x[:4])) + '0531'
    elif x[4:6] == '07':
        x = str(int(x[:4])) + '0630'
    elif x[4:6] == '08':
        x = str(int(x[:4])) + '0731'
    elif x[4:6] == '09':
        x = str(int(x[:4])) + '0831'
    elif x[4:6] == '10':
        x = str(int(x[:4])) + '0930'
    elif x[4:6] == '11':
        x = str(int(x[:4])) + '1031'
    elif x[4:6] == '12':
        x = str(int(x[:4])) + '1130'

    return x


def getvalues(x,y,z):
    dbstring = DATABASES['default']
    con = psycopg2.connect(
        host=dbstring['HOST'],
        port=dbstring['PORT'],
        database=dbstring['NAME'],
        user=dbstring['USER'],
        password=dbstring['PASSWORD'])
    cur = con.cursor()
    cur.execute("SELECT date, hr100, hr1000, hrb, wdy, sc, ec, bi, wspd, tmax, rhmax, rhmin FROM firedata WHERE date='" + x + "' OR date='" + y + "' OR date='" + z + "' ORDER BY date DESC")
    x = cur.fetchall()


    cur.close()
    con.close()

    return x


def fetch():
    today = date.today()
    today = str(today)
    today = today.split('-')
    today = today[0] + today[1] + today[2]

    # Yesterday
    yesterday1 = str(int(today) - 1)
    if yesterday1[6:] == '00':
        yesterday1 = daterollback(yesterday1)
    # Two days ago
    yesterday2 = str(int(yesterday1) - 1)
    if yesterday2[6:] == '00':
        yesterday2 = daterollback(yesterday2)
    # Three days ago
    yesterday3 = str(int(yesterday2) - 1)
    if yesterday3[6:] == '00':
        yesterday3 = daterollback(yesterday3)
    values = getvalues(yesterday1, yesterday2, yesterday3)
    yesterday1 = values[0]
    yesterday2 = values[1]
    yesterday3 = values[2]
    return yesterday1, yesterday2, yesterday3

def main():
    yesterday1, yesterday2, yesterday3 = fetch()
    critical = 0
    moderate = 0


    # Calculate 100 hr fuels criticality
    hr100 = (yesterday1[1] + yesterday2[1] + yesterday3[1]) / 3
    if hr100 < 6:
        criticalhr100 = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif hr100 < 12 and hr100 >= 6:
        criticalhr100 = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticalhr100 = 'NORMAL'


    # Calculate 1000 hr fuels criticality
    hr1000 = yesterday1[2]
# CHANGE CRITICAL VALUE?
    if hr1000 < 15:
        criticalhr1000 = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif hr1000 < 20 and hr1000 >= 15:
        criticalhr1000 = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticalhr1000 = 'NORMAL'


    # Calculate Herbaceous live fuels criticality
    hrb = yesterday1[3]
# CHANGE CRITICAL VALUE?
    if hrb <= 100:
        criticalhrb = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif hrb <= 125 and hrb > 100:
        criticalhrb = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticalhrb = 'NORMAL'


    # Calculate Woody live fuels criticality
    wdy = yesterday1[4]
# CHANGE CRITICAL VALUE?
    if wdy <= 100:
        criticalwdy = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif wdy <= 125 and wdy > 100:
        criticalwdy = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticalwdy = 'NORMAL'
    

    sc = yesterday1[5]


    # Calculate Energy Release Component criticality
    ec = yesterday1[6]
# CHANGE CRITICAL VALUE?
    if ec >= 42:
        criticalec = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif ec < 42 and ec >= 36:
        criticalec = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticalec = 'NORMAL'


    # Calculate Burn Index criticality
    bi = yesterday1[7]
# CHANGE CRITICAL VALUE?
    if bi >= 25:
        criticalbi = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif wdy < 25 and bi >= 20:
        criticalbi = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticalbi = 'NORMAL'


    # Calculate Wind Speed criticality
    wspd = yesterday1[8]
# CHANGE CRITICAL VALUE?
    if wspd >= 8:
        criticalwspd = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif wspd < 8 and wspd >= 4:
        criticalwspd = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticalwspd = 'NORMAL'


    # Calculate Temperature criticality
# USE YESTERDAY OR TODAY?
    tmax = yesterday1[9]
# CHANGE CRITICAL VALUE?
    if tmax >= 89:
        criticaltmax = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif tmax < 89 and tmax >= 75:
        criticaltmax = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticaltmax = 'NORMAL'


###    # Calculate RHMax criticality
    rhmax = yesterday1[10]
# CHANGE CRITICAL VALUE?
    if rhmax <= 45:
        criticalrhmax = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif rhmax <= 55 and rhmax > 45:
        criticalrhmax = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticalrhmax = 'NORMAL'


###    # Calculate RHMin criticality
    rhmin = yesterday1[11]
# CHANGE CRITICAL VALUE?
    if rhmin <= 16:
        criticalrhmin = 'CRITICAL'
        critical += 1
# CHANGE MODERATE UPPER VALUE?
    elif rhmin <= 25 and rhmin > 16:
        criticalrhmin = 'MODERATE'
        moderate += 1
# DOES THIS LABEL NEED TO CHANGE?
    else:
        criticalrhmin = 'NORMAL'


    criticaldata = [['date','hr100','hr1000','hrb','wdy','sc','ec','bi','wspd','tmax','rhmax','rhmin'],['Yesterday',criticalhr100,criticalhr1000,criticalhrb,criticalwdy,'sc',criticalec,criticalbi,criticalwspd,criticaltmax,criticalrhmax,criticalrhmin],yesterday1,yesterday2,yesterday3,[10-(critical+moderate), moderate, critical]]

    return criticaldata

#main()
#input()
