// Configuración de distancia máxima
const MAX_DISTANCE = 64;

// Función principal de info
export function info(player) {
    // Verificar si el jugador está mirando una entidad
    const targetEntity = player.getEntitiesFromViewDirection({
        maxDistance: MAX_DISTANCE,
    })[0]?.entity;

    if (targetEntity !== undefined && targetEntity.isValid()) {
        handleEntityDisplay(player, targetEntity);
        return;
    }
}

function hptext(currentHealth, maxHealth) {
    if (!maxHealth) return;

    if (maxHealth <= 40) {
        const maxHearts = Math.ceil(maxHealth / 2);
        const fullHearts = Math.floor(currentHealth / 2);
        const hasHalfHeart = currentHealth % 2 === 1 && fullHearts < maxHearts;
        const emptyHearts = maxHearts - fullHearts - (hasHalfHeart ? 1 : 0);
    }

    return `:§2 ${currentHealth}§7 / ${maxHealth}§r`;
}

// Función para manejar la visualización de información de entidades
function handleEntityDisplay(player, entity) {
    const isMinecraftNamespace = entity.typeId.split(":")[0] === "minecraft";
    const health = entity.getComponent("minecraft:health");

    if (entity.typeId !== "dungeon:player_controller") {
        player.addTag("viewing_info");
        // Mostrar información de la entidad en la barra de acción
        player.onScreenDisplay.setActionBar([
            {
                translate: entity.typeId === "minecraft:player"
                    ? "".concat(entity.name)
                    : `entity.${isMinecraftNamespace ? entity.typeId.split(":")[1] : entity.typeId}.name`
            },
            {
                text: entity.hasComponent("minecraft:movement")
                    ? "\n" // Aquí se agrega el salto de línea fuera de la traducción
                    : null
            },
            {
                translate: entity.hasComponent("minecraft:navigation.walk")
                    ? `dungeon.langcode.navigation.walk.canbreakdoors.${entity.getComponent("minecraft:navigation.walk").canBreakDoors ? "yes" : "no"}`
                    : null
            },
            {
                text: entity.hasComponent("minecraft:navigation.walk")
                    ? "\n" // Aquí se agrega el salto de línea fuera de la traducción
                    : null
            },
            {
                translate: entity.hasComponent("minecraft:movement")
                    ? "dungeon.langcode.speed" // El valor de la velocidad se colocará aquí
                    : null
            },
            {
                text: entity.hasComponent("minecraft:movement")
                    ? `: ${(entity.getComponent("minecraft:movement").currentValue * 100).toFixed(2)}%`
                    : null
            },
            {
                text: entity.hasComponent("minecraft:movement")
                    ? "\n" // Aquí se agrega el salto de línea fuera de la traducción
                    : null
            },
            {
                translate: entity.hasComponent("minecraft:fire_immune")
                    ? `dungeon.langcode.fireinmune.${entity.getComponent("minecraft:fire_immune") ? "yes" : "yes"}`
                    : null
            },
            {
                translate: entity.hasComponent("minecraft:fire_immune")
                ? "\n" // Aquí se agrega el salto de línea fuera de la traducción
                : null
            },
            {
                translate: entity.hasComponent("minecraft:health") 
                ? `dungeon.langcode.health` 
                : null
                
            },
            {
                translate: entity.hasComponent("minecraft:health") 
                ? `${hptext(Math.round(health.currentValue), health.effectiveMax)}` 
                : null
                
            },
        ]);
    }
}
const maxDistance = 6;

export function detectDungeonBlocks(player) {
    const block = player.getBlockFromViewDirection({ maxDistance })?.block;
    const toolInfo = getinformation(block);

    if (block && block.isValid()) {
        player.addTag("viewing_info");
        // Verificar si el bloque pertenece a las categorías "dungeon" o "otherworldly_winter"
        const namespace = block.typeId.split(":")[0]; // Obtener el prefijo del bloque
        const blockId = block.typeId.split(":")[1]; // Obtener solo el identificador
        const blockTranslationKey = `tile.${namespace}:${blockId}.name`; // Generar clave de traducción

        if (namespace === "dungeon" || namespace === "otherworldly_winter") {
            // Mostrar información traducida del bloque
            player.onScreenDisplay.setActionBar([
                {
                    translate: blockTranslationKey, // Usar la clave de traducción del bloque
                },
                {
                    text: toolInfo.tool !== undefined
                        ? "\n" // Agregar salto de línea si hay una herramienta
                        : null
                },
                {
                    translate: toolInfo.tool !== undefined
                        ? "dungeon.langcode.tool.correct_tool" // Traducir la herramienta correcta
                        : "dungeon.langcode.tool.none",  // Si no hay herramienta, mostrar "ninguna"
                    with: [toolInfo.tool] // Pasar la herramienta como parámetro para la traducción
                },
                {
                    translate: toolInfo.tool !== undefined
                        ? `dungeon.langcode.tool.${toolInfo.tool.toLowerCase()}`  // Utiliza el nombre de la herramienta en minúsculas para la clave de traducción
                        : "dungeon.langcode.tool.none",  // Si no hay herramienta, mostrar "ninguna"
                    with: [toolInfo.tool] // Pasa el nombre de la herramienta como parámetro
                },

            ]);
        } else {
            // Limpiar la barra si no es válido
        }
    } else {
        // Limpiar la barra si no hay bloque válido en la vista
    }
}
function getinformation(block) {
    // Verificar si no hay un bloque válido o no se apunta a ningún bloque
    if (!block || !block.isValid()) return { tool: "none", farmable: false };

    // Configuración de herramientas y criterios
    const toolCriteria = [
        {
            tool: "Wood",
            matches: [
                "log", "planks", "oak_wood", "birch_wood", "spruce_wood", "jungle_wood", "acacia_wood", "dark_oak_wood", "coal_ore", "stone", "coal_ore", "deepslate", "spidernest", "solid_sand", "cold_stone", "jungle_stone",
            ],
            tags: ["minecraft:wood", "wooden_tier", "dungeon:is_pickaxe_item_destructible",],
        },
        {
            tool: "Stone",
            matches: [
                "iron_ore", "copper_ore", "silver_ore", "cobalt_ore",
            ],
            tags: ["minecraft:stone", "minecraft:coal_ore", "minecraft:iron_ore"],
        },
        {
            tool: "Iron",
            matches: [
                "gold_ore", "lapis_ore", "redstone_ore", "diamond_ore","vitalife_ore", "emerald_ore", "quartz_ore",
            ],
            tags: ["minecraft:gold_ore", "minecraft:lapis_ore", "minecraft:redstone_ore", "minecraft:iron_tier_destructible"],
        },
        {
            tool: "Diamond",
            matches: [
                "netherite_ore", "ancient_debris",
            ],
            tags: ["minecraft:netherite_ore", "minecraft:ancient_debris"],
        },
        {
            tool: "Netherite",
            matches: [
                "glimmerite_ore", "jade_ore",
            ],
            tags: ["minecraft:glimmerite_ore"],
        },
        {
            tool: "Glimmerite",
            matches: [
                "viritum_ore", "titanium_ore"
            ],
            tags: ["minecraft:viritum_ore"],
        },
        {
            tool: "Silvirum",
            matches: [
                "purplebrickinfested", "bluebrickinfested"
            ],
            tags: ["dungeon:infestedblockstier2", "dungeon:infestedblockstier1", "dungeon:infestedblockstier0"],
        },
        {
            tool: "Hand",
            matches: [
                "gift", //Manos
            ],
            tags: [],
        },
    ];

    // Buscar coincidencias con herramientas si se tiene alguna
    for (const criteria of toolCriteria) {
        const { tool, matches, tags, exclusions = [], farmable = false } = criteria;

        // Verificar coincidencias en typeId (con la herramienta adecuada)
        if (
            matches.some((match) =>
                block.typeId.includes(match) &&
                !exclusions.some((exclude) => block.typeId.includes(exclude))
            )
        ) {
            return { tool: tool, farmable }; // Devolver el nombre de la herramienta sin la clave de traducción
        }

        // Verificar coincidencias en etiquetas
        if (tags.some((tag) => block.hasTag(tag))) {
            return { tool: tool, farmable }; // Devolver el nombre de la herramienta sin la clave de traducción
        }
    }

    // Caso cuando el jugador no tiene herramientas pero el bloque es farmable o interactuable
    if (block.hasTag("minecraft:crop") || block.hasTag("dirt") || block.hasTag("grass_block") || block.hasTag("wood")) {
        return { tool: "none", farmable: true }; // El bloque es farmable o recolectable sin herramienta
    }

    // Si no coincide con ningún criterio y no es farmable, retornar null
    return { tool: "none", farmable: false };
}






