/**
 * @fileoverview Utility module for interpreterSetup.js
 * 
 * @module games.semaforo.hooks.interpreterSetup
 */

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

/**
 * Configura e registra as funções do intérprete para o jogo Semáforo.
 * Retorna uma função que será passada ao ambiente do interpretador para
 * expor ações como `mudarSemaforo`, `aguardarSegundos`, `tocarSom`, entre outras.
 *
 * @param {Object} scene - Referência à cena do Phaser (SemaforoScene)
 * @param {Object} [config={}] - Opções de configuração (não utilizadas atualmente)
 * @returns {function(interpreter: Object, globalScope: Object): void} Função de inicialização do interpretador
 */
export const setupSemaforoAPI = (scene, config = {}) => {
  const getAnimationDelay = () => {
    if (scene.executionSpeed >= 75) return 1;
    if (scene.executionSpeed >= 50) return 2;
    if (scene.executionSpeed >= 25) return 5;
    return 10;
  };

  return (interpreter, globalScope) => {
    ApiHelpers.registerFunction(
      interpreter,
      globalScope,
      "mudarSemaforo",
      ApiHelpers.createActionWrapper(
        scene,
        "mudarSemaforoCarros",
        getAnimationDelay(),
      ),
      true,
    );

    ApiHelpers.registerFunction(
      interpreter,
      globalScope,
      "mudarSemaforoPedestre",
      ApiHelpers.createActionWrapper(
        scene,
        "mudarSemaforoPedestre",
        getAnimationDelay(),
      ),
      true,
    );

    ApiHelpers.registerFunction(
      interpreter,
      globalScope,
      "aguardarSegundos",
      ApiHelpers.createActionWrapper(scene, "aguardarSegundos"),
      true,
    );

    ApiHelpers.registerFunction(
      interpreter,
      globalScope,
      "piscarLuzPedestre",
      ApiHelpers.createActionWrapper(scene, "piscarLuzPedestre"),
      true,
    );

    ApiHelpers.registerFunction(
      interpreter,
      globalScope,
      "tocarSom",
      ApiHelpers.createActionWrapper(scene, "tocarSom"),
      true,
    );

    ApiHelpers.registerFunction(
      interpreter,
      globalScope,
      "pararSom",
      ApiHelpers.createActionWrapper(scene, "pararSom"),
      true,
    );

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