import { world, system, ItemStack } from "@minecraft/server";

const pudricionEnProceso = new Map();

function carnePudricion(player) {
    try {
        const inventory = player.getComponent("minecraft:inventory").container;  
        const carnes = [
            { typeId: "minecraft:porkchop", tiempo: 10 * 60 * 20 }, // Cerdo crudo: 10 minutos
            { typeId: "minecraft:cod", tiempo: 5 * 60 * 20 }, // Pescado crudo: 5 minutos
            { typeId: "minecraft:salmon", tiempo: 5 * 60 * 20 }, // Salmón crudo: 5 minutos 
            { typeId: "minecraft:tropical_fish", tiempo: 5 * 60 * 20 }, // Pescado tropical: 5 minutos
            { typeId: "minecraft:beef", tiempo: 5 * 60 * 20 }, // Carne de vaca cruda: 5 minutos
            { typeId: "mc_ark:raw_prime_meat", tiempo: 3 * 60 * 20 }, // Ternero crudo: 3 minutos
            { typeId: "minecraft:mutton", tiempo: 3 * 60 * 20 }, // Ternero crudo: 3 minutos
            { typeId: "minecraft:chicken", tiempo: 8 * 60 * 20 }, // Pollo crudo: 8 minutos
            { typeId: "minecraft:rabbit", tiempo: 8 * 60 * 20 }  //Conejo crudo: 8 minutos
        ];

        carnes.forEach(carne => {
            const pudricionKey = `${player.name}_${carne.typeId}`;

            if (!pudricionEnProceso.get(pudricionKey)) {
                let itemIndex = -1;
                for (let i = 0; i < inventory.size; i++) {
                    const item = inventory.getItem(i);
                    if (item?.typeId === carne.typeId) {
                        itemIndex = i;
                        break;
                    }
                }

                if (itemIndex !== -1) {
                    pudricionEnProceso.set(pudricionKey, true);

                    system.runTimeout(() => {
                        const itemToRemove = inventory.getItem(itemIndex);
                        if (itemToRemove && itemToRemove.typeId === carne.typeId) {
                            if (itemToRemove.amount > 1) {
                                const newItem = new ItemStack(carne.typeId, itemToRemove.amount - 1);
                                inventory.setItem(itemIndex, newItem);
                            } else {
                                inventory.setItem(itemIndex, undefined);
                            }
                            player.runCommandAsync("give @s minecraft:rotten_flesh 1");
                        }
                        pudricionEnProceso.delete(pudricionKey);
                    player.runCommandAsync("playsound hit.slime @s");
                    }, carne.tiempo);
                }
            }
        });
    } catch (error) {
        console.error("Error en carnePudricion:", error);
    }
}

system.runInterval(() => {
    try {
        const players = world.getPlayers();
        players.forEach(player => carnePudricion(player));
    } catch (error) {
        console.error("Error en runInterval de carnePudricion:", error);
    }
}, 1);
 