# -*- coding: utf-8 -*-
"""
Created on Fri Jul 20 17:49:20 2018

Although this file is titled tdameritrade data, the data actually comes from
tradingcharts.com

@author: cpace
"""
import json
import activecontracts
import requests
import datetime

dataDict = []

def formatprice(price):
    if price != '-':
        return float(price)/100
    else:
        return 0

def MakeUrl(baseString, data):
    for x in data:
        baseString += x + '%2C'
    return baseString

def GetData(tradeDate):
    monthCodes = {"F":"Jan","G":"Feb","H":"Mar","J":"Apr","K":"May","M":"Jun","N":"Jul","Q":"Aug","U":"Sep","V":"Oct","X":"Nov","Z":"Dec"}
    fields = ['high', 'low', 'open', 'lastPrice', 'netChange', 'volume', 'tradeTimestamp', 'name', 'symbol']
    apiKey = '2d8b3b803594b13e02a7dc827f4a63f8'
    URL = 'https://ondemand.websol.barchart.com/getQuote.json?apikey=' + apiKey + '&fields='
    dataoutput = {}
    
    session = requests.Session()
    out = activecontracts.GetContracts(tradeDate)
    
    output = MakeUrl(URL, fields)
    output += '&symbols='
    output = MakeUrl(output, out)
        
    
    with session as c:
        apicall = c.get(output)
        
    data=json.loads(apicall.text) #get data in dict format
    dataDict.append(data)
    
    for i in range(len(data['results'])-1):  
        if data['results'][i]['name'] == 'Soybean':
            name = 'Soybeans'
        else:
            name = data['results'][i]['name']
        
        if int(data['results'][i]['symbol'][-1]) == 9:
            contractYear = 2019
        else:
            contractYear = 2020 + int(data['results'][i]['symbol'][-1])
        
        priceChange = data['results'][i]['netChange']
        if priceChange == "unch" or priceChange == "UNCH" or priceChange == 0:
            priceChange = 'unch'
        
         
        dataoutput.update({i: {\
                                'high':data['results'][i]['high'], \
                                'low':data['results'][i]['low'], \
                                'open':data['results'][i]['open'], \
                                'last':data['results'][i]['lastPrice'], \
                                'change':priceChange, \
                                'volume':data['results'][i]['volume'], \
                                'tradeDate': data['results'][i]['tradeTimestamp'].split('T')[0], \
                                'cropCode': name, \
                                'monthCode' : monthCodes[data['results'][i]['symbol'][2]], \
                                'contractYear' : contractYear, \
                                'shortYear' : contractYear - 2000, \
                                'shortSymbol' : data['results'][i]['symbol'][:3] + str(contractYear - 2000), \
                                'quoteCode':str(data['results'][i]['symbol']) \
                                }})
        
        
    return dataoutput

print(json.dumps(GetData(datetime.date.today())))

