// Example addon: adds a "My Robot" toolbox category with two custom blocks.
//
// To use: click "Addons" in the toolbar, upload this file, and the
// "My Robot" category will appear in the toolbox.

// --- Block definitions ---
api.Blockly.Blocks['robot_drive'] = {
  init() {
    this.appendDummyInput()
      .appendField('drive')
      .appendField(new api.Blockly.FieldDropdown([
        ['forward', 'FORWARD'],
        ['backward', 'BACKWARD'],
        ['left', 'LEFT'],
        ['right', 'RIGHT'],
        ['stop', 'STOP'],
      ]), 'DIRECTION');
    this.appendValueInput('SPEED')
      .setCheck('Number')
      .appendField('speed');
    this.setInputsInline(true);
    this.setPreviousStatement(true, null);
    this.setNextStatement(true, null);
    this.setColour(45);
    this.setTooltip('Drive the robot in a direction at a given speed');
  },
};

api.Blockly.Blocks['robot_beep'] = {
  init() {
    this.appendValueInput('TIMES')
      .setCheck('Number')
      .appendField('beep');
    this.appendDummyInput()
      .appendField('times');
    this.setInputsInline(true);
    this.setPreviousStatement(true, null);
    this.setNextStatement(true, null);
    this.setColour(45);
    this.setTooltip('Make the robot beep');
  },
};

// --- Code generators ---
api.pythonGenerator.forBlock['robot_drive'] = function (block) {
  const dir = block.getFieldValue('DIRECTION');
  const speed = api.pythonGenerator.valueToCode(
    block, 'SPEED', api.pythonGenerator.ORDER_NONE
  ) || '0';
  return `robot.drive("${dir.toLowerCase()}", ${speed})\n`;
};

api.pythonGenerator.forBlock['robot_beep'] = function (block) {
  const times = api.pythonGenerator.valueToCode(
    block, 'TIMES', api.pythonGenerator.ORDER_NONE
  ) || '1';
  return `robot.beep(${times})\n`;
};

// --- Register toolbox category ---
api.registerCategories([
  {
    kind: 'category',
    name: 'My Robot',
    colour: '45',
    contents: [
      {
        kind: 'block',
        type: 'robot_drive',
        inputs: {
          SPEED: { shadow: { type: 'math_number', fields: { NUM: 100 } } },
        },
      },
      {
        kind: 'block',
        type: 'robot_beep',
        inputs: {
          TIMES: { shadow: { type: 'math_number', fields: { NUM: 3 } } },
        },
      },
    ],
  },
]);
