/**
 * @license Licensed under the Apache License, Version 2.0 (the "License"):
 *          http://www.apache.org/licenses/LICENSE-2.0
 */

/**
 * @fileoverview Code generator for the test 2 blocks.
 */
'use strict';

goog.provide('Blockly.Python.env');
goog.require('Blockly.Python');

Blockly.Python['env_init'] = function(block) {
    Blockly.Python.addDeclaration('env_init_', '#include "DHT.h"\n  #define DHTTYPE DHT11\n');
    Blockly.Python.addSetup('env_init_2', 'Serial.println("DHTxx test!"); \n');
    return "";
};

// Blockly.Python['iot_buzzer_alarm'] = function(block) {
//   var number_alarm_time = block.getFieldValue('alarm_time');
//   Blockly.Python.addDeclaration('buzzer_alarm_decl', "#define PIN_BUZZER    7\n");
//   Blockly.Python.addSetup('buzzer_alarm_setup','pinMode(PIN_BUZZER, OUTPUT)\n');
//   var code = 'digitalWrite(PIN_BUZZER, HIGH);\ndelay('+number_alarm_time+')\n';
//   return code;
// };

// var valuesMap = new Map();

Blockly.Python['iot_read_val'] = function(block) {
    var dropdown_val_type = block.getFieldValue('val_type');
    var code;
    if (dropdown_val_type == 'mic') {
        var decl = "#define PIN_MIC    A2\n";
        Blockly.Python.addDeclaration('iot_mic_decl', decl);
        Blockly.Python.addSetup('iot_mic_setup', 'pinMode(PIN_MIC, INPUT);');
        code = 'analogRead(PIN_MIC)';
    } else if (dropdown_val_type == 'light') {
        var decl = "#define PIN_LIGHT    A1\n";
        Blockly.Python.addDeclaration('iot_light_decl', decl);
        Blockly.Python.addSetup('iot_light_setup', 'pinMode(PIN_LIGHT, INPUT);');
        code = 'analogRead(PIN_LIGHT)';
    } else { //humidity
        code = 'dht.readHumidity()';
    }
    // valuesMap.set(dropdown_val_type, text_val_name);
    return [code, Blockly.Python.ORDER_ATOMIC];
};

Blockly.Python['iot_read_mic'] = function(block) {

    var code;
    var pin_mic = block.getFieldValue('env_sensor_mic');
    var decl = "#define PIN_MIC " + pin_mic;
    Blockly.Python.addDeclaration('iot_mic_decl', decl);
    Blockly.Python.addSetup('iot_mic_setup', 'pinMode(PIN_MIC, INPUT);');
    code = 'analogRead(PIN_MIC)';
    // valuesMap.set(dropdown_val_type, text_val_name);
    return [code, Blockly.Python.ORDER_ATOMIC];
};

Blockly.Python['iot_read_light'] = function(block) {

    var code;
    var pin_light = block.getFieldValue('env_sensor_light');
    var decl = "#define PIN_LIGHT " + pin_light;
    Blockly.Python.addDeclaration('iot_light_decl', decl);
    Blockly.Python.addSetup('iot_light_setup', 'pinMode(PIN_LIGHT, INPUT);');
    code = 'analogRead(PIN_LIGHT)';
    // valuesMap.set(dropdown_val_type, text_val_name);
    return [code, Blockly.Python.ORDER_ATOMIC];
};

Blockly.Python['iot_read_humid'] = function(block) {
    var pin_humid = block.getFieldValue('env_sensor_humid');
    var humid_decl = '#define DHTPIN ' + pin_humid + '\n' + 'DHT dht(DHTPIN, DHTTYPE)\n';
    Blockly.Python.addDeclaration('humid_temp_init', humid_decl);
    var humid_setup = 'dht.begin()\n';
    Blockly.Python.addSetup('humid_temp_setup', humid_setup);
    var code = 'dht.readHumidity()';
    // valuesMap.set(dropdown_val_type, text_val_name);
    return [code, Blockly.Python.ORDER_ATOMIC];
};

Blockly.Python['iot_read_temp'] = function(block) {
    var pin_temp = block.getFieldValue('env_sensor_temp');
    var temp_decl = '#define DHTPIN ' + pin_temp + '\n' + 'DHT dht(DHTPIN, DHTTYPE)\n';
    Blockly.Python.addDeclaration('humid_temp_init', temp_decl);
    var temp_setup = 'dht.begin()\n';
    Blockly.Python.addSetup('humid_temp_setup', temp_setup);
    var dropdown_temp_unit = block.getFieldValue('temp_unit');
    var code = 'dht.readTemperature(';
    if (dropdown_temp_unit == 'c') {
        code += ')';
    } else { //f
        code += 'true)';
    }
    // valuesMap.set('temp', text_temp_name);
    return [code, Blockly.Python.ORDER_ATOMIC];
};

// Blockly.Python['iot_threshold_controller'] = function(block) {
//   var dropdown_threshold_types = block.getFieldValue('threshold_types');
//   var text_threshold_val = block.getFieldValue('threshold_val');
//   var statements_do = Blockly.Python.statementToCode(block, 'Do');

//   var variable;
//   if (valuesMap.has(dropdown_threshold_types)) {
//     variable = valuesMap.get(dropdown_threshold_types);
//   }
//   var code = 'if ('+variable+' >= '+text_threshold_val+') {\n' +
//               statements_do +
//               '}\n';
//   return code;
// };

Blockly.Python['iot_buzzer'] = function(block) {
    var pin = block.getFieldValue('PINSNUM');
    var freq = Blockly.Python.valueToCode(block, 'FREQUENCY', Blockly.Python.ORDER_ATOMIC);
    var pinSetupCode = 'pinMode(' + pin + ', OUTPUT)\n';
    Blockly.Python.addSetup('iot_buzzer_' + pin, pinSetupCode, false);

    var code = 'tone(' + pin + ',' + freq + ')\n';
    return code;
};

Blockly.Python['iot_nobuzzer'] = function(block) {
    //var pin = Blockly.Python.valueToCode(block, 'PINSNUM', Blockly.Python.ORDER_ATOMIC);
    var pin = block.getFieldValue('PINSNUM');
    var pinSetupCode = 'pinMode(' + pin + ', OUTPUT)\n';
    Blockly.Python.addSetup('iot_buzzer_' + pin, pinSetupCode, false);
    var code = 'noTone(' + pin + ')\n';
    return code;
};

Blockly.Python['iot_set_rgb'] = function(block) {

    var redPin = block.getFieldValue('env_sensor_rgbPin_r');
    var greenPin = block.getFieldValue('env_sensor_rgbPin_g');
    var bluePin = block.getFieldValue('env_sensor_rgbPin_b');
    var pin_rgb = "int redPin = " + redPin + "\n  int greenPin = " + greenPin + "\n  int bluePin = " + bluePin + ";";
    Blockly.Python.addDeclaration('pin_rgb', pin_rgb);

    var setup_rgb = "pinMode(redPin, OUTPUT)\n" +
        "pinMode(greenPin, OUTPUT)\n  " +
        "pinMode(bluePin, OUTPUT)\n" +
        "setColor(0,0,0)\n";
    Blockly.Python.addSetup('setup_rgb', setup_rgb);

    var setcolor_rgb = 'void setColor(int red, int green, int blue)\n' +
        '{\n' +
        '    red = 255 - red\n' +
        '    green = 255 - green\n' +
        '    blue = 255 - blue\n' +
        '  analogWrite(redPin, red)\n' +
        '  analogWrite(greenPin, green)\n' +
        '  analogWrite(bluePin, blue)\n' +
        '}\n';
    Blockly.Python.addFunction('setcolor_rgb', setcolor_rgb);
    var r = Blockly.Python.valueToCode(block, 'RED_VAL', Blockly.Python.ORDER_ATOMIC);
    var g = Blockly.Python.valueToCode(block, 'GREEN_VAL', Blockly.Python.ORDER_ATOMIC);
    var b = Blockly.Python.valueToCode(block, 'BLUE_VAL', Blockly.Python.ORDER_ATOMIC);
    var code = 'setColor(' + r + ',' + g + ',' + b + ');';
    return code;
}