/**
 * @license
 * Visual Blocks Language
 *
 * Copyright 2012 Google Inc.
 * https://developers.google.com/blockly/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @fileoverview Generating Python for CORGIS big data blocks.
 * @author acbart@vt.edu (Austin Cory Bart)
 */
'use strict';

goog.provide('Blockly.Python.corgis');

goog.require('Blockly.Python');


/*
 * Weather Data
 */
Blockly.Python['weather_temperature_get'] = function(block) {
    Blockly.Python.definitions_['get_temperatures'] = "__temperatures = [{'Min Temp': 32, 'Max Temp': 46, 'Avg Temp': 39}, {'Min Temp': 31, 'Max Temp': 47, 'Avg Temp': 39}, {'Min Temp': 41, 'Max Temp': 51, 'Avg Temp': 46}, {'Min Temp': 38, 'Max Temp': 52, 'Avg Temp': 45}, {'Min Temp': 29, 'Max Temp': 38, 'Avg Temp': 34}, {'Min Temp': 31, 'Max Temp': 44, 'Avg Temp': 38}, {'Min Temp': 24, 'Max Temp': 36, 'Avg Temp': 30}, {'Min Temp': 9, 'Max Temp': 32, 'Avg Temp': 22}, {'Min Temp': 31, 'Max Temp': 36, 'Avg Temp': 34}, {'Min Temp': 33, 'Max Temp': 43, 'Avg Temp': 38}, {'Min Temp': 23, 'Max Temp': 39, 'Avg Temp': 31}, {'Min Temp': 4, 'Max Temp': 30, 'Avg Temp': 14}, {'Min Temp': 19, 'Max Temp': 34, 'Avg Temp': 27}, {'Min Temp': 35, 'Max Temp': 42, 'Avg Temp': 39}, {'Min Temp': 37, 'Max Temp': 42, 'Avg Temp': 40}, {'Min Temp': 31, 'Max Temp': 40, 'Avg Temp': 36}, {'Min Temp': 30, 'Max Temp': 37, 'Avg Temp': 34}, {'Min Temp': 33, 'Max Temp': 41, 'Avg Temp': 37}, {'Min Temp': 35, 'Max Temp': 42, 'Avg Temp': 39}, {'Min Temp': 36, 'Max Temp': 42, 'Avg Temp': 40}, {'Min Temp': 20, 'Max Temp': 33, 'Avg Temp': 27}, {'Min Temp': 20, 'Max Temp': 39, 'Avg Temp': 30}, {'Min Temp': 25, 'Max Temp': 32, 'Avg Temp': 29}, {'Min Temp': -9, 'Max Temp': 8, 'Avg Temp': 0}, {'Min Temp': 32, 'Max Temp': 42, 'Avg Temp': 37}, {'Min Temp': 60, 'Max Temp': 60, 'Avg Temp': 60}, {'Min Temp': 60, 'Max Temp': 60, 'Avg Temp': 60}, {'Min Temp': 60, 'Max Temp': 60, 'Avg Temp': 60}, {'Min Temp': 39, 'Max Temp': 46, 'Avg Temp': 43}, {'Min Temp': 33, 'Max Temp': 42, 'Avg Temp': 38}, {'Min Temp': 29, 'Max Temp': 35, 'Avg Temp': 32}, {'Min Temp': 23, 'Max Temp': 39, 'Avg Temp': 32}, {'Min Temp': 13, 'Max Temp': 29, 'Avg Temp': 21}, {'Min Temp': 2, 'Max Temp': 9, 'Avg Temp': 6}, {'Min Temp': 32, 'Max Temp': 40, 'Avg Temp': 36}, {'Min Temp': 24, 'Max Temp': 57, 'Avg Temp': 41}, {'Min Temp': 25, 'Max Temp': 54, 'Avg Temp': 40}, {'Min Temp': 45, 'Max Temp': 69, 'Avg Temp': 58}, {'Min Temp': 43, 'Max Temp': 69, 'Avg Temp': 56}, {'Min Temp': 15, 'Max Temp': 42, 'Avg Temp': 29}, {'Min Temp': 27, 'Max Temp': 51, 'Avg Temp': 39}, {'Min Temp': 27, 'Max Temp': 48, 'Avg Temp': 38}, {'Min Temp': 34, 'Max Temp': 49, 'Avg Temp': 42}, {'Min Temp': 33, 'Max Temp': 60, 'Avg Temp': 47}, {'Min Temp': 12, 'Max Temp': 42, 'Avg Temp': 27}, {'Min Temp': 21, 'Max Temp': 49, 'Avg Temp': 35}, {'Min Temp': 37, 'Max Temp': 51, 'Avg Temp': 44}, {'Min Temp': 33, 'Max Temp': 53, 'Avg Temp': 44}, {'Min Temp': 36, 'Max Temp': 55, 'Avg Temp': 46}, {'Min Temp': 41, 'Max Temp': 53, 'Avg Temp': 47}, {'Min Temp': 43, 'Max Temp': 65, 'Avg Temp': 54}, {'Min Temp': 45, 'Max Temp': 63, 'Avg Temp': 55}, {'Min Temp': 36, 'Max Temp': 50, 'Avg Temp': 44}, {'Min Temp': 38, 'Max Temp': 51, 'Avg Temp': 45}, {'Min Temp': 34, 'Max Temp': 52, 'Avg Temp': 44}, {'Min Temp': 41, 'Max Temp': 57, 'Avg Temp': 49}, {'Min Temp': 45, 'Max Temp': 64, 'Avg Temp': 55}, {'Min Temp': 41, 'Max Temp': 51, 'Avg Temp': 46}, {'Min Temp': 33, 'Max Temp': 44, 'Avg Temp': 39}, {'Min Temp': 39, 'Max Temp': 62, 'Avg Temp': 51}, {'Min Temp': 37, 'Max Temp': 63, 'Avg Temp': 51}, {'Min Temp': 33, 'Max Temp': 51, 'Avg Temp': 42}, {'Min Temp': -5, 'Max Temp': 33, 'Avg Temp': 14}, {'Min Temp': 9, 'Max Temp': 45, 'Avg Temp': 28}, {'Min Temp': -23, 'Max Temp': 3, 'Avg Temp': -10}, {'Min Temp': 12, 'Max Temp': 40, 'Avg Temp': 27}, {'Min Temp': 4, 'Max Temp': 24, 'Avg Temp': 14}, {'Min Temp': 4, 'Max Temp': 47, 'Avg Temp': 26}, {'Min Temp': 32, 'Max Temp': 43, 'Avg Temp': 38}, {'Min Temp': 27, 'Max Temp': 40, 'Avg Temp': 34}, {'Min Temp': 27, 'Max Temp': 46, 'Avg Temp': 37}, {'Min Temp': 27, 'Max Temp': 46, 'Avg Temp': 37}, {'Min Temp': 58, 'Max Temp': 68, 'Avg Temp': 63}, {'Min Temp': 70, 'Max Temp': 82, 'Avg Temp': 76}, {'Min Temp': 51, 'Max Temp': 62, 'Avg Temp': 56}, {'Min Temp': 50, 'Max Temp': 61, 'Avg Temp': 56}, {'Min Temp': 74, 'Max Temp': 82, 'Avg Temp': 79}, {'Min Temp': 70, 'Max Temp': 82, 'Avg Temp': 76}, {'Min Temp': 57, 'Max Temp': 72, 'Avg Temp': 65}, {'Min Temp': 44, 'Max Temp': 52, 'Avg Temp': 48}, {'Min Temp': 48, 'Max Temp': 57, 'Avg Temp': 53}, {'Min Temp': 59, 'Max Temp': 71, 'Avg Temp': 66}, {'Min Temp': 62, 'Max Temp': 74, 'Avg Temp': 69}, {'Min Temp': 67, 'Max Temp': 80, 'Avg Temp': 74}, {'Min Temp': 47, 'Max Temp': 58, 'Avg Temp': 51}, {'Min Temp': 36, 'Max Temp': 54, 'Avg Temp': 45}, {'Min Temp': 36, 'Max Temp': 48, 'Avg Temp': 42}, {'Min Temp': 41, 'Max Temp': 56, 'Avg Temp': 48}, {'Min Temp': 40, 'Max Temp': 53, 'Avg Temp': 47}, {'Min Temp': 49, 'Max Temp': 62, 'Avg Temp': 56}, {'Min Temp': 65, 'Max Temp': 81, 'Avg Temp': 73}, {'Min Temp': 64, 'Max Temp': 81, 'Avg Temp': 73}, {'Min Temp': 60, 'Max Temp': 80, 'Avg Temp': 71}, {'Min Temp': 64, 'Max Temp': 79, 'Avg Temp': 72}, {'Min Temp': 60, 'Max Temp': 79, 'Avg Temp': 70}, {'Min Temp': 7, 'Max Temp': 23, 'Avg Temp': 15}, {'Min Temp': 12, 'Max Temp': 29, 'Avg Temp': 21}, {'Min Temp': -4, 'Max Temp': 21, 'Avg Temp': 8}, {'Min Temp': 20, 'Max Temp': 30, 'Avg Temp': 25}, {'Min Temp': 19, 'Max Temp': 31, 'Avg Temp': 25}]";
    let code = "__temperatures";
    return [code, Blockly.Python.ORDER_ATOMIC];
};
Blockly.Python['weather_temperature'] = function(block) {
    Blockly.Python.definitions_['import_weather'] = 'import weather';
    var code = 'weather.get_temperature(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('CITY'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};
Blockly.Python['weather_forecasts'] = function(block) {
    Blockly.Python.definitions_['import_weather'] = 'import weather';
    var code = 'weather.get_forecasts(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('CITY'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};
Blockly.Python['weather_highs_lows'] = function(block) {
    Blockly.Python.definitions_['import_weather'] = 'import weather';
    var code = 'weather.get_highs_lows(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('CITY'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};

Blockly.Python['weather_report'] = function(block) {
    Blockly.Python.definitions_['import_weather'] = 'import weather';
    var code = 'weather.get_report(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('CITY'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};

Blockly.Python['weather_report_forecasts'] = function(block) {
    Blockly.Python.definitions_['import_weather'] = 'import weather';
    var code = 'weather.get_forecasted_reports(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('CITY'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};

Blockly.Python['weather_all_forecasts'] = function(block) {
    Blockly.Python.definitions_['import_weather'] = 'import weather';
    var code = 'weather.get_all_forecasted_temperatures()'
    return [code, Blockly.Python.ORDER_ATOMIC];
};

/*
 * Stocks Data
 */
Blockly.Python['stocks_current'] = function(block) {
    Blockly.Python.definitions_['import_stocks'] = 'import stocks';
    var code = 'stocks.get_current(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('TICKER'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};
Blockly.Python['stocks_past'] = function(block) {
    Blockly.Python.definitions_['import_stocks'] = 'import stocks';
    var code = 'stocks.get_past(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('TICKER'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};

/*
 * Earthquake Data
 */
Blockly.Python['earthquake_get'] = function(block) {
    Blockly.Python.definitions_['import_earthquakes'] = 'import earthquakes';
    var code = 'earthquakes.get(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('PROPERTY'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};
Blockly.Python['earthquake_both'] = function(block) {
    Blockly.Python.definitions_['import_earthquakes'] = 'import earthquakes';
    var code = 'earthquakes.get_both()';
    return [code, Blockly.Python.ORDER_ATOMIC];
};
Blockly.Python['earthquake_all'] = function(block) {
    Blockly.Python.definitions_['import_earthquakes'] = 'import earthquakes';
    var code = 'earthquakes.get_all()';
    return [code, Blockly.Python.ORDER_ATOMIC];
};

/*
 * Crime Data
 */
Blockly.Python['crime_state'] = function(block) {
    Blockly.Python.definitions_['import_crime'] = 'import crime';
    var code = 'crime.get_' + block.getFieldValue('TYPE') + '_crimes(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('STATE'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};

Blockly.Python['crime_year'] = function(block) {
    Blockly.Python.definitions_['import_crime'] = 'import crime';
    var code = 'crime.get_by_year(';
    var argument0 = Blockly.Python.quote_(block.getFieldValue('YEAR'));
    code += argument0 + ')';
    return [code, Blockly.Python.ORDER_ATOMIC];
};

Blockly.Python['crime_all'] = function(block) {
    Blockly.Python.definitions_['import_crime'] = 'import crime';
    var code = 'crime.get_all()';
    return [code, Blockly.Python.ORDER_ATOMIC];
};

/*
 * Book Data
 */
Blockly.Python['books_get'] = function(block) {
    Blockly.Python.definitions_['import_books'] = 'import books';
    var code = 'books.get_all()';
    return [code, Blockly.Python.ORDER_ATOMIC];
};