// 'use strict';

// goog.provide('Blockly.Blocks.jsontool');

// goog.require('Blockly.Blocks');
// goog.require('Blockly.Types');

// Blockly.Blocks.jsontool.HUE = 130;


// /****************************************
//  *   *    *    *    *    *    *    *    *
//  *           Generate JSON              *
//  *   *    *    *    *    *    *    *    *
//  ****************************************/

// /*JSON tool 
//  *setup for generator
//  *name a JSON  
//  *add map {key :value} into this JSON
//  */
// Blockly.Blocks['jsontool_generator_setup'] = {
//     init: function() {
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_SETUP)
//             .appendField(new Blockly.FieldTextInput("jsonVar"), "JSONNAME");
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setPreviousStatement(true, null);
//         this.setNextStatement(true, null);
//         // this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };
// Blockly.Blocks['jsontool_generator_keyvalue'] = {
//     init: function() {
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR);
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_JSONOBJECT)
//             .appendField(new Blockly.FieldTextInput("jsonVar"), "JSONNAME");
//         this.appendValueInput("KEY")
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_KEY);
//         this.appendValueInput("VALUE")
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_VALUE);
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setPreviousStatement(true, null);
//         this.setNextStatement(true, null);
//         this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };

// /*JSON tool 
//  *create a main JSON Object/Array
//  *name a JSON  
//  *
//  */
// Blockly.Blocks['jsontool_generator_main_block'] = {
//     /**
//      * Block for creating a main Json object/array with any number of elements of 
//      * { [key:value] or [nested object] or [nested array]}.
//      * @this Blockly.Block
//      */
//     init: function() {
//         // var nameField = new Blockly.FieldTextInput(
//         //     Blockly.Msg.JSONTOOL_GENERATOR_MAIN_JSONNAME,
//         //     Blockly.jsontool.rename);
//         // nameField.setSpellcheck(false);
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_MAIN_TITLE)
//             .appendField(new Blockly.FieldDropdown([
//                 ["Object", "Object"],
//                 ["Array", "Array"]
//             ]), "jsontype");
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_MAIN_TITLE_NAME)
//             // .appendField(nameField, 'NAME');
//             .appendField(new Blockly.FieldTextInput("jsonVar"), 'NAME');
//         this.appendStatementInput('STACK');
//         this.setPreviousStatement(true, null);
//         this.setNextStatement(true, null);
//         this.setHelpUrl("");
//         this.setTooltip("");
//         this.setColour(Blockly.Blocks.jsontool.HUE);

//     },
//     /**
//      * Initialization of the block has completed, clean up anything that may be
//      * inconsistent as a result of the XML loading.
//      * @this Blockly.Block
//      */
//     validate: function() {
//         var name = Blockly.Procedures.findLegalName(
//             this.getFieldValue('NAME'), this);
//         this.setFieldValue(name, 'NAME');
//     },
//     /**
//      * Add custom menu options to this block's context menu.
//      * @param {!Array} options List of menu options to add to.
//      * @this Blockly.Block
//      */
//     //   customContextMenu: function(options) {
//     //     // Add option to create caller.
//     //     var option = {enabled: true};
//     //     var name = this.getFieldValue('NAME');
//     //     option.text = Blockly.Msg.PROCEDURES_CREATE_DO.replace('%1', name);
//     //     var xmlBlock = goog.dom.createDom('block', null, null);
//     //     xmlBlock.setAttribute('type', this.callType_);
//     //     option.callback = Blockly.ContextMenu.callbackFactory(this, xmlBlock);
//     //     options.push(option);
//     //   },
//     //   callType_: 'procedures_callnoreturn',
//     /** @return {!string} This block does not define type, so 'undefined' */
//     getVarType: function(varName) {
//         return Blockly.Types.UNDEF;
//     },
// };

// /*JSON tool 
//  *create a  nested JSON Object/Array
//  *name a JSON  
//  *nest in the main JSON Object/Array
//  */
// Blockly.Blocks['jsontool_generator_nested_block'] = {
//     /**
//      * Block for creating a nested Json object/array with any number of elements of 
//      * { [key:value] or [nested object] or [nested array]}.
//      * @this Blockly.Block
//      */
//     init: function() {
//         // var nameField = new Blockly.FieldTextInput(
//         //     Blockly.Msg.JSONTOOL_GENERATOR_MAIN_JSONNAME,
//         //     Blockly.jsontool.rename);
//         // nameField.setSpellcheck(false);
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_NESTED_TITLE)
//             .appendField(new Blockly.FieldDropdown([
//                 ["Object", "Object"],
//                 ["Array", "Array"]
//             ]), "jsontype");
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_NESTED_TITLE_NAME)
//             // .appendField(nameField, 'NAME');
//             .appendField(new Blockly.FieldTextInput(Blockly.Msg.JSONTOOL_GENERATOR_MAIN_JSONNAME), 'NAME');
//         this.appendStatementInput('STACK1');
//         this.setPreviousStatement(true, null);
//         this.setNextStatement(true, null);
//         this.setHelpUrl("");
//         this.setTooltip("");
//         this.setColour(Blockly.Blocks.jsontool.HUE);

//     },
//     /**
//      * Initialization of the block has completed, clean up anything that may be
//      * inconsistent as a result of the XML loading.
//      * @this Blockly.Block
//      */
//     validate: function() {
//         var name = Blockly.Procedures.findLegalName(
//             this.getFieldValue('NAME'), this);
//         this.setFieldValue(name, 'NAME');
//     },

//     /**
//      * Return all variables referenced by this block.
//      * @return {!Array.<string>} List of variable names.
//      * @this Blockly.Block
//      */

//     //   /**
//     //    * Add custom menu options to this block's context menu.
//     //    * @param {!Array} options List of menu options to add to.
//     //    * @this Blockly.Block
//     //    */
//     //   customContextMenu: function(options) {
//     //     // Add option to create caller.
//     //     var option = {enabled: true};
//     //     var name = this.getFieldValue('NAME');
//     //     option.text = Blockly.Msg.PROCEDURES_CREATE_DO.replace('%1', name);
//     //     var xmlBlock = goog.dom.createDom('block', null, null);
//     //     xmlBlock.setAttribute('type', this.callType_);
//     //     option.callback = Blockly.ContextMenu.callbackFactory(this, xmlBlock);
//     //     options.push(option);
//     //   },
//     //   callType_: 'procedures_callnoreturn',
//     /** @return {!string} This block does not define type, so 'undefined' */
//     getVarType: function(varName) {
//         return Blockly.Types.UNDEF;
//     },
// };

// /**
//  *JSON object generate with [key:value]
//  *
//  */
// Blockly.Blocks['jsontool_generator_object_keyValue'] = {
//     /**
//      * blocks of key-value for JSON Object
//      * @this Blockly.Block
//      */
//     init: function() {
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.appendValueInput("KEY")
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_KEY);
//         this.appendValueInput("VALUE")
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_VALUE);
//         this.setPreviousStatement(true);
//         this.setNextStatement(true);
//         // this.setOutput(true,"String");
//         this.setInputsInline(true);
//         this.setTooltip("");
//     }
// };

// /**
//  *JSON array generate with [value]
//  *
//  */
// Blockly.Blocks['jsontool_generator_array_value'] = {
//     /**
//      * blocks of value for JSON Array
//      * @this Blockly.Block
//      */
//     init: function() {
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.appendValueInput("VALUE")
//             .appendField(Blockly.Msg.JSONTOOL_GENERATOR_ARRAY_VALUE);
//         this.setPreviousStatement(true);
//         this.setNextStatement(true);
//         // this.setOutput(true,"String");
//         this.setInputsInline(true);
//         this.setTooltip("");
//     }
// };

// // /**
// // *JSON container for create items
// // *
// // */
// // Blockly.Blocks['json_create_with_container'] = {
// //     /**
// //      * Mutator block for json container.
// //      * @this Blockly.Block
// //      */
// //     init: function() {
// //       this.setColour(Blockly.Blocks.jsontool.HUE);
// //       this.appendDummyInput()
// //           .appendField(Blockly.Msg.JSON_CREATE_WITH_CONTAINER_TITLE_ADD);
// //       this.appendStatementInput('STACK');
// //       this.setTooltip("");
// //       this.contextMenu = false;
// //     }
// // };

// // /**
// // *JSON container for add items
// // *
// // */
// // Blockly.Blocks['json_create_with_item'] = {
// //     /**
// //      * Mutator bolck for adding items.
// //      * @this Blockly.Block
// //      */
// //     init: function() {
// //       this.setColour(Blockly.Blocks.jsontool.HUE);
// //       this.appendDummyInput()
// //           .appendField(Blockly.Msg.JSONTOOL_CREATE_WITH_ITEM_TITLE);
// //       this.setPreviousStatement(true);
// //       this.setNextStatement(true);
// //       this.setTooltip("");
// //       this.contextMenu = false;
// //     }
// // };


// /****************************************
//  *   *    *    *    *    *    *    *    *
//  *             Parse JSON               *
//  *   *    *    *    *    *    *    *    *
//  ****************************************/
// /*JSON tool 
//  *parse json setup
//  */
// Blockly.Blocks['jsontool_parse_setup'] = {
//     init: function() {
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_SETUP);
//         this.appendDummyInput()
//             .appendField(new Blockly.FieldTextInput("jsonVar"), "JSONNAME")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_JSONOBJECT);
//         this.appendValueInput("OBJECT_SIZE")
//             .appendField(Blockly.Msg.JSONTOOL_OBJECT_SIZE);
//         this.appendValueInput("ARRAY_SIZE")
//             .appendField(Blockly.Msg.JSONTOOL_ARRAY_SIZE);
//         this.appendValueInput("RESPONSE")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_RESPONSE);
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setPreviousStatement(true);
//         this.setNextStatement(true);
//         // this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };

// /*JSON tool 
//  *parse json 
//  */
// Blockly.Blocks['jsontool_parse_begin'] = {
//     init: function() {
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_EACH)
//             .appendField(new Blockly.FieldTextInput("jsonVar"), "JSONNAME");
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_TOVAR)
//             .appendField(new Blockly.FieldVariable(
//                 Blockly.Msg.VARIABLES_DEFAULT_NAME), 'VAR')
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_VARTYPE)
//             .appendField(new Blockly.FieldDropdown(
//                 [
//                     ["Text", "Text"],
//                     ["Number", "Number"],
//                     ["Boolean", "Boolean"],
//                     ["Large Number", "Large Number"],
//                     ["Decimal", "Decimal"]
//                 ]), 'JSONVAR_TYPE');
//         this.appendValueInput("KEY")
//             // .appendField(Blockly.Msg.JSONTOOL_PARSE_BY);
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         // this.setOutput(true,Blockly.Types.TEXT.output);
//         this.setPreviousStatement(true, null);
//         this.setNextStatement(true, null);
//         // this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
//     //   this.jsonInit({
//     //     "message0": Blockly.Msg.JSONTOOL_PARSE_KEYVALUE,
//     //      "args0": [
//     //        {
//     //          "type": "field_input",
//     //          "name": "JSONNAME",
//     //          "check": "Text",
//     //          "text": "jsonVar"
//     //        }, 
//     //        {
//     //          "type": "input_value",
//     //          "name": "KEY",
//     //          "check": "Text"
//     //        }
//     //      ],
//     //      "output": null,
//     //      "colour": Blockly.Blocks.jsontool.HUE,
//     //      "inputsInline": true,
//     //    });
//     //   },

//     //   /**
//     //    * Assigns a type to the block based on the selected type to cast.
//     //    * @return {!string} Blockly type for this block configuration.
//     //    * @this Blockly.Block
//     //    */
//     //   getBlockType: function() {
//     //     var blocklyTypeKey = this.getFieldValue('JSONVAR_TYPE');
//     //     return Blockly.Types[blocklyTypeKey];
//     //   },

//     getVarType: function(varName) {
//         // var varType = this.getFieldValue('JSONVAR_TYPE');
//         // console.log(Blockly.Types[varType]);
//         // return Blockly.Types[varType];

//         let vartype = Blockly.Types.UNDEF;
//         if (this && this.getFieldValue('JSONVAR_TYPE') === 'Text') {
//             vartype = Blockly.Types.TEXT;
//         } else if (this && this.getFieldValue('JSONVAR_TYPE') === 'Number') {
//             vartype = Blockly.Types.NUMBER;
//         } else if (this && this.getFieldValue('JSONVAR_TYPE') === 'Boolean') {
//             vartype = Blockly.Types.BOOLEAN;
//         } else if (this && this.getFieldValue('JSONVAR_TYPE') === 'Large Number') {
//             vartype = Blockly.Types.LARGE_NUMBER;
//         } else if (this && this.getFieldValue('JSONVAR_TYPE') === 'Decimal') {
//             vartype = Blockly.Types.DECIMAL;
//         }
//         return vartype;
//     }

// };

// /*JSON parse tool 
//  *parse json with key-value
//  */
// Blockly.Blocks['jsontool_parse_key'] = {
//     init: function() {
//         this.appendValueInput("KEY")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_KEY);
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setOutput(true, Blockly.Types.TEXT.output);
//         // this.setPreviousStatement(true, null);
//         // this.setNextStatement(true, null);
//         this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };

// /*JSON parse tool 
//  *parse json with array-value in Json object
//  */
// Blockly.Blocks['jsontool_parse_arr_inobject'] = {
//     init: function() {
//         this.appendValueInput("VAR")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_ARRAY);
//         this.appendValueInput("INDEX")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_INDEX);
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setOutput(true, Blockly.Types.TEXT.output);
//         // this.setPreviousStatement(true, null);
//         // this.setNextStatement(true, null);
//         this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };

// /*JSON parse tool 
//  *parse json with array-value in Json array
//  */
// Blockly.Blocks['jsontool_parse_arr_inarray'] = {
//     init: function() {
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_ARRAY);
//         this.appendValueInput("INDEX")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_INDEX);
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setOutput(true, Blockly.Types.TEXT.output);
//         // this.setPreviousStatement(true, null);
//         // this.setNextStatement(true, null);
//         this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };
// /*JSON parse tool 
//  *parse json with key-value with nests
//  */
// Blockly.Blocks['jsontool_parse_key_nest'] = {
//     init: function() {
//         this.appendValueInput("KEY")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_KEY);
//         this.appendValueInput("NEST")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_NEST);
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setOutput(true, Blockly.Types.TEXT.output);
//         // this.setPreviousStatement(true, null);
//         // this.setNextStatement(true, null);
//         // this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };

// /*JSON parse tool 
//  *parse json with array-value in JSON object with nests
//  */
// Blockly.Blocks['jsontool_parse_arr_inobject_nest'] = {
//     init: function() {
//         this.appendValueInput("VAR")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_ARRAY);
//         this.appendValueInput("INDEX")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_INDEX);
//         this.appendValueInput("NEST")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_NEST);
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setOutput(true, Blockly.Types.TEXT.output);
//         // this.setPreviousStatement(true, null);
//         // // this.setNextStatement(true, null);
//         // this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };
// /*JSON parse tool 
//  *parse json with array-value  in JSON array with nests
//  */
// Blockly.Blocks['jsontool_parse_arr_inarray_nest'] = {
//     init: function() {
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_ARRAY);
//         this.appendValueInput("INDEX")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_INDEX);
//         this.appendValueInput("NEST")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_NEST);
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setOutput(true, Blockly.Types.TEXT.output);
//         // this.setPreviousStatement(true, null);
//         // // this.setNextStatement(true, null);
//         // this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };


// /*JSON tool 
//  *method to print Json data in a pretty way
//  */
// Blockly.Blocks['jsontool_parse_prettyPrint'] = {
//     init: function() {
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_PRETTYPRINT)
//             .appendField(new Blockly.FieldTextInput("jsonVar"), "JSONNAME")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_PRETTYPRINT_WAY)
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         // this.setOutput(true,Blockly.Types.BOOLEAN.output);
//         this.setPreviousStatement(true, null);
//         this.setNextStatement(true, null);
//         // this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };

// /*JSON tool 
//  *expose JSONmessageBuffer to user
//  *
//  */
// Blockly.Blocks['jsontool_parse_prettyPrint_display'] = {
//     init: function() {
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_PRETTYPRINT_DISPLAY)
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setOutput(true, Blockly.Types.BOOLEAN.output);
//         // this.setPreviousStatement(true, null);
//         // this.setNextStatement(true, null);
//         // this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };


// /*JSON tool 
//  *check whether it parse success
//  */
// Blockly.Blocks['jsontool_parse_isSuccess'] = {
//     init: function() {
//         this.appendDummyInput()
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_ISSUCCESS_NAME)
//             .appendField(new Blockly.FieldTextInput("jsonVar"), "JSONNAME")
//             .appendField(Blockly.Msg.JSONTOOL_PARSE_ISSUCCESS)
//         this.setColour(Blockly.Blocks.jsontool.HUE);
//         this.setOutput(true, Blockly.Types.BOOLEAN.output);
//         // this.setPreviousStatement(true, null);
//         // this.setNextStatement(true, null);
//         // this.setInputsInline(true);
//         this.setTooltip("");
//         this.setHelpUrl("");
//     },
// };