/**
 * @fileoverview Utility module for fieldAngleLoader.js
 * 
 * @module blockly.fieldAngle
 */

import * as Blockly from "blockly/core";

/**
 * Intercepta e cachea registro do CSS do Blockly para evitar injeção duplicada.
 * Problema: @blockly/field-angle tenta injetar CSS toda vez que é importado.
 * Solução: Cachear conteúdo CSS e pular re-registro.
 *
 * @private
 * @type {Set<string>} Set de conteúdo CSS já registrado
 */
const cssAlreadyInjected = new Set();

/**
 * Referência à implementação original de registro de CSS do Blockly.
 * Usada para delegar comportamento após checagem de cache.
 *
 * @private
 * @type {Function}
 */
const originalRegister = Blockly.Css.register;

/**
 * Substitui `Blockly.Css.register` para evitar registro duplicado de CSS.
 * Concatena arrays em string, verifica cache e delega para a implementação
 * original quando necessário. Em caso de erro pré-existente de injeção, ignora.
 *
 * @private
 * @param {string|Array<string>} content - Conteúdo CSS para registrar
 * @returns {void}
 */
Blockly.Css.register = function (content) {
  const contentStr = Array.isArray(content) ? content.join("") : content;

  if (cssAlreadyInjected.has(contentStr)) {
    return;
  }

  cssAlreadyInjected.add(contentStr);

  try {
    originalRegister.call(Blockly.Css, content);
  } catch (error) {
    // Alguns ambientes lançam erro quando CSS já foi injetado; ignoramos
    if (!error.message?.includes("CSS already injected")) {
      throw error;
    }
  }
};

/**
 * Re-export seguro de `FieldAngle` do pacote `@blockly/field-angle`.
 * Deve ser importado através deste módulo para evitar problemas de CSS injection
 * múltipla.
 *
 * @exports FieldAngle
 */
export { FieldAngle } from "@blockly/field-angle";
