#!/usr/bin/python3
import pandas as pd
import numpy as np
from glob import glob
import os
import metrics as m
import sys


input_dir = "/home/disk/rocinante/DATA/temp/chico/hyak"
data_dir = input_dir + "/data_atmos/"
output_dir = input_dir + "/writeup/pub_stream/"
namelist = input_dir + "/writeup/scripts/loc_list.csv"

#durs = [("1hour", 1), ("1day", 24), ("7day", 168)]

ldurs = [("1day", 24), ("7day", 168)]
pdurs = [("1hour", 1), ("1day", 24)]
gcms = ['pnnl']

ldf = pd.read_csv(namelist)

for gcm in gcms:
    print("GCM: {}".format(gcm))
    idir = "{}/*{}*/".format(data_dir, gcm)
    data = sorted(glob("{}/*.hour".format((idir))))
    
    for ifile in data:
        loc = os.path.basename(ifile).split('.hour')[0]
        loc2 = ldf[ldf.loc1==loc]['loc2']
        if loc2.empty:
            print("Location {} - name not found.".format(loc))
            continue
        else:
            loc = loc2.values[0]
            print(loc)

        odir = "{}/{}/".format(output_dir, loc)
        os.makedirs(odir, exist_ok=True)


        df = m.read_data(ifile)
        df = m.filter_wyear(df, 1970, 2015)
        df.columns = ["Flow"]
        df.index.name = "DATE"
        df.to_csv("{}/{}_{}_Timeseries.csv".format(odir, loc, gcm), float_format="%0.2f")
        
        df_1990s = m.filter_wyear(df, 1982, 2010)
        dfs = [("1990s", df_1990s)]
        
        for (pds, cdf) in dfs:
            
            print("\tCalculate Lows: ", pds)
            for (dur_lbl, dur) in ldurs:
                # Calculte lows
                pdf = m.calc_low(cdf, dur)

                # Calculate extremes
                #edf = m.use_bootstrap(pdf, m.calc_extremes)
                edf = m.calc_extremes(pdf, [2, 10], False)

                wyrs = pdf.index.year + (pdf.index.month > 9)
                pdf.insert(0, "WYEAR", wyrs)
                pdf.to_csv("{}/{}_{}_{}_{}_LowFlows.csv".format(odir, loc, gcm, pds, dur_lbl), float_format="%0.2f")
                edf.to_csv("{}/{}_{}_{}_{}_LowStats.csv".format(odir, loc, gcm, pds, dur_lbl), float_format="%0.2f")
                
                
            print("\tCalculate Peaks: ", pds)
            for (dur_lbl, dur) in pdurs:
                # Calculte peaks
                pdf = m.calc_peak(cdf, dur)

                # Calculate extremes
                #edf = m.use_bootstrap(pdf, m.calc_extremes)
                edf = m.calc_extremes(pdf, [2,5,10,25,100], True)

                wyrs = pdf.index.year + (pdf.index.month > 9)
                pdf.insert(0, "WYEAR", wyrs)
                pdf.to_csv("{}/{}_{}_{}_{}_PeakFlows.csv".format(odir, loc, gcm, pds, dur_lbl), float_format="%0.2f")
                edf.to_csv("{}/{}_{}_{}_{}_PeakStats.csv".format(odir, loc, gcm, pds, dur_lbl), float_format="%0.2f")
            
            
            print("\tCalculate Monthly Avg: ", pds)
            madf = m.calc_monthlyavg(cdf)
            madf.to_csv()
            madf.to_csv("{}/{}_{}_{}_MonthlyAvg.csv".format(odir, loc, gcm, pds), float_format="%0.2f")
