#!/usr/bin/python

'''
ACIS-WS Sample Code --> Spatial summary of grid data
Averages of daily maximum temperatures
spanning one year summarized
over the state Nevada.
The result is a time series of daily maximum
temperatures averaged over the area.
'''


#######################################
#Import modules required by Acis
import requests, json, sys
#######################################
#######################################
#Import plotting tools
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
import datetime
import numpy as np
#######################################
#Set Acis data server
base_url = "https://data.rcc-acis.org/"
#######################################
#Acis WebServices functions
#######################################
def make_request(url,params) :
    try:
        response = requests.post(url, data={'params': json.dumps(params)}, headers={"Accept":"application/json"})
        return response.json()
    except:
        print ("Error making ACIS Web Services call")
        sys.exit()

def GridData(params) :
    return make_request(base_url+"GridData",params)
###################################################
#M A I N
###################################################
if __name__ == "__main__":
    #Set parameters for data request
    params = {
        "state":"nv",
        "sdate":"20130701",
        "edate":"20140701",
        "grid":"1",
        "elems":[{"name":"maxt","area_reduce":"state_mean"}],
    }
    #Obtain data
    data = GridData(params)

    #Generate time series
    dates = [datetime.datetime(int(d[0][0:4]),int(d[0][5:7]),int(d[0][8:10])) for d in data['data']]
    dates = np.array(dates)
    ave_maxt = np.array([d[1]["NV"] for d in data['data']])

    #Plotting
    fig, ax = plt.subplots()
    ax.plot(dates, ave_maxt)
    #Format the ticks
    ax.xaxis.set_major_locator(mdates.MonthLocator())
    ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonthday=1))
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))
    ax.grid(True)
    ax.set_xlabel('2013/2014')
    ax.set_ylabel('Average Maximum Daily Temperature in Nevada')
    plt.show()