import { ApiHelpers } from "../../../../interpreters/ApiHelpers.js";

/**
 * Retorna a função de init do js-interpreter para o jogo Exemplo2.
 *
 * @param {Exemplo2Scene} scene
 * @returns {Function} Função de init com assinatura (interpreter, globalScope)
 */
export const setupExemplo2API = (scene) => {
  return function (interpreter, globalScope) {
    // imprimir(texto) é síncrona: apenas atualiza o estado da cena, sem aguardar animação.
    // Por isso usa createNativeFunction em vez de createAsyncFunction.
    const imprimirWrapper = interpreter.createNativeFunction((textoRaw) => {
      // js-interpreter pode passar primitivos diretamente ou encapsulados em {data: ...}
      const texto =
        textoRaw !== null && typeof textoRaw === "object" && textoRaw.data !== undefined
          ? String(textoRaw.data)
          : String(textoRaw ?? "");
      scene.imprimir(texto);
    });
    interpreter.setProperty(globalScope, "imprimir", imprimirWrapper);

    ApiHelpers.registerFunction(
      interpreter,
      globalScope,
      "highlightBlock",
      ApiHelpers.createHighlightWrapper(scene),
      false
    );
  };
};
