"use strict";

import "blockly/blocks";
import { CORES_BLOCKLY } from "@/blockly/blocklyColors";
import { configurarGerador, gerarStatementComValor } from "@/blockly/generator";
import { gerarToolboxDeEstrutura } from "@/blockly/toolbox";
import { criarBlocoStatementComValor } from "@/blockly/blockFactory";

// text e text_join são blocos nativos do Blockly; não precisam de defineBlocks
const ESTRUTURA_TOOLBOX = [
  {
    nome: "Funções",
    cor: CORES_BLOCKLY.VARIAVEIS,
    cssContainer: "cat_saida",
    blocos: ["exemplo2_imprimir"],
  },
  {
    nome: "Texto",
    cor: CORES_BLOCKLY.TEXTO,
    cssContainer: "cat_texto",
    blocos: ["text", "text_join"],
  },
];

export const registerBlocks = () => {
  defineBlocks();
  defineGenerators();
};

export const generateDynamicToolbox = (allowedBlocks = []) => {
  return gerarToolboxDeEstrutura(ESTRUTURA_TOOLBOX, allowedBlocks);
};

const defineBlocks = () => {
  // Bloco statement que aceita qualquer valor de texto como input
  criarBlocoStatementComValor(
    "exemplo2_imprimir",
    "imprimir",
    "TEXTO",
    null, // aceita qualquer tipo (String ou texto concatenado)
    CORES_BLOCKLY.VARIAVEIS
  );
};

const defineGenerators = () => {
  configurarGerador();

  // gerarStatementComValor lê o input "TEXTO" e usa o template para gerar o código
  gerarStatementComValor(
    "exemplo2_imprimir",
    "TEXTO",
    (valor) => `imprimir(${valor})`
  );
};
