'use strict';

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

Blockly.Python['wifiClient_http_setup'] = function(block) {
    var wifi_httpclient = "#include <ESP8266HTTPClient.h>";
    Blockly.Python.addInclude('wifi_httpclient', wifi_httpclient);
    var HTTPResponse = "String http_response;";
    Blockly.Python.addDeclaration('HTTP_Response', HTTPResponse);
    var HTTPCode = "int httpCode;";
    Blockly.Python.addDeclaration('HTTP_code', HTTPCode);
    let serial_setup = "Serial.begin(9600);";
    Blockly.Python.addSetup('serial_9600', serial_setup);
    var code = "HTTPClient http;\n";
    Blockly.Python.addDeclaration("wifi_httpclient_setup", code);
    code = ''
    return code;
};

Blockly.Python['wifiClient_http_get'] = function(block) {
    var json_include = "#include <ArduinoJson.h>";
    Blockly.Python.addInclude("json_declaration", json_include);
    // var parse_data_type = "int ParseData_type = ";

    var varName = block.getFieldValue("VAR");
    var url = "http://192.168.4.1" + (block.getFieldValue('URL') || "");
    var code = "" +
        "if ((millis() % 1000) /100  % 5 == 0 ) {\n" +
        "  http.begin(\"" + url + "\");\n" +
        "  httpCode = http.GET();\n" +
        "  // Serial.print(\"HTTP code: \");\n" +
        "  // Serial.println(httpCode);\n" +
        "  http_response = http.getString();\n" +
        "  http.end();\n" +
        "}\n"
        // "delay(500);\n"
    code += "StaticJsonBuffer<800> jsonBuffer_" + varName + ";\n" +
        "JsonObject& parse_" + varName + " = jsonBuffer_" + varName + ".parseObject(http_response);\n";
    return code;
};

Blockly.Python['wifiClient_http_get_getValue'] = function(block) {
    var varName = block.getFieldValue("VAR") || '';
    var index = block.getFieldValue("INDEX") || '';
    var type = block.getFieldValue("TYPE") || '';
    var code = "parse_" + varName + "[\"data\"][" + index + "]"
    if (type == "Int") code += ".as<int>()"
    else code += ".as<String>()"
    return [code, Blockly.Python.ORDER_ATOMIC];
}

Blockly.Python['wifiClient_http_post'] = function(block) {
    var json_include = "#include <ArduinoJson.h>";
    Blockly.Python.addInclude("json_include", json_include);
    var precode = "char JSONmessageBuffer[240];\n";
    Blockly.Python.addDeclaration("jsontool_prettyPrint", precode);
    var VarName = block.getFieldValue('VAR') || "json";
    var code = "StaticJsonBuffer<800> JSONbuffer_" + VarName + ";\n" +
        "JsonObject& " + VarName + "_json_ = JSONbuffer_" + VarName + ".createObject();\n" +
        "JsonArray& data_json_C = " + VarName + "_json_.createNestedArray(\"data\");\n" +
        // "JsonArray& data_type_C = " + VarName + "_json_.createNestedArray(\"type\");\n"+
        "";
    var content = "";
    var data_;
    var url = "http://192.168.4.1" + (block.getFieldValue('URL') || "");
    for (let i = 0; i < block.itemCount_; i++) {
        data_ = Blockly.Python.valueToCode(block, "ADD" + i);
        code += "data_json_C.add(" + data_ + ");\n";
        // if (block.childBlocks_[i].type == "text") {
        //     code += "data_type_C.add(0);\n";
        // } else if (block.childBlocks_[i].type == "math_number") {
        //     code += "data_type_C.add(1);\n";
        // }
    }
    code += "String jsonString_" + VarName + ";\n" + VarName + "_json_.printTo(jsonString_" + VarName + ");\n";
    code += "" +
        "if ((millis() % 1000) /100  % 5 == 0 ) {\n" +
        "  http.begin(\"" + url + "\");\n";
    code += "  http.addHeader(\"Content-Type\",\"application/json\");\n";
    code += "  httpCode = http.POST(jsonString_" + VarName + ");\n" +
        "  Serial.print(\"HTTP code: \");\n" +
        "  Serial.println(httpCode);\n" +
        "  http_response = http.getString();\n" +
        "  http.end();\n" +
        "}\n"
        // "delay(500);\n"
    return code;
};

// Blockly.Python['wificlient_http_put'] = function(block) {
//   var content = Blockly.Python.valueToCode(block, 'VAR', Blockly.Python.ORDER_ATOMIC) || "";
//   var code = "http.POST("+content+");";
//   return code;
// };
Blockly.Python['wifiClient_http_put'] = function(block) {
    var content = Blockly.Python.valueToCode(block, 'DATA', Blockly.Python.ORDER_ATOMIC) || "";
    var url = Blockly.Python.valueToCode(block, 'URL', Blockly.Python.ORDER_ATOMIC) || "";
    var type = block.getFieldValue("TYPE");
    var code = "http.begin(" + url + ");\n";
    if (type == "Cloud Data") code += "http.addHeader(\"Content-Type\",\"application/json\");\n" +
        "httpCode = http.sendRequest(\"PUT\",\"" + content + "\")\n";
    else if (type == "String") code += "httpCode = http.sendRequest(\"PUT\"," + content + ")\n";
    code += "Serial.print(\"HTTP code: \");\n" +
        "Serial.println(httpCode);\n" +
        "http_response = http.getString();\n" +
        "http.end();\n"
        // "delay(500);\n"
    return code;
};

Blockly.Python['wifiClient_http_response'] = function(block) {
    var code = "http_response";
    return [code, Blockly.Python.ORDER_ATOMIC];
};