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

const ARMOR_SOUNDS = {
    // Tier 0
    "linked:sa": "armor.equip_iron",
    "linked:sgb": "armor.equip_iron",
    "linked:sa2": "armor.equip_iron",
    "linked:sl": "armor.equip_iron",
    "linked:sb": "armor.equip_iron",
    
    "linked:sa": "armor.equip_diamond",
    "linked:sgb": "armor.equip_diamond",
    "linked:sa2": "armor.equip_diamond",
    "linked:sl": "armor.equip_diamond",
    "linked:sb": "armor.equip_diamond",
    
    "linked:dka": "armor.equip_iron",
    "linked:dksb": "armor.equip_iron",
    "linked:dkl": "armor.equip_iron",
    "linked:dkg": "armor.equip_iron",
    
    // Tier 1
    "linked:bh": "armor.equip_netherite",
    "linked:ba": "armor.equip_netherite",
    "linked:bl": "armor.equip_netherite",
    "linked:bb": "armor.equip_netherite",
    
    "linked:shb": "armor.equip_netherite",
    "linked:sa3": "armor.equip_netherite",
    "linked:sl2": "armor.equip_netherite",
    "linked:sg": "armor.equip_netherite",
    
    "linked:tsh": "armor.equip_netherite",
    "linked:tsa": "armor.equip_netherite",
    "linked:tsl": "armor.equip_netherite",
    "linked:tsg": "armor.equip_netherite",
    
    // Tier 2
    "linked:kodh": "armor.equip_netherite",
    "linked:koda": "armor.equip_netherite",
    "linked:kodl": "armor.equip_netherite",
    "linked:kodg": "armor.equip_netherite",
    
    "linked:voth": "armor.equip_netherite",
    "linked:vota": "armor.equip_netherite",
    "linked:votl": "armor.equip_netherite",
    "linked:votg": "armor.equip_netherite",
    
    "linked:aoah": "armor.equip_netherite",
    "linked:aoaa": "armor.equip_netherite",
    "linked:aoal": "armor.equip_netherite",
    "linked:aoag": "armor.equip_netherite",
    
    "linked:ch": "armor.equip_netherite",
    "linked:ca": "armor.equip_netherite",
    "linked:cl": "armor.equip_netherite",
    "linked:cb": "armor.equip_netherite",
    
    "linked:mkh2": "armor.equip_netherite",
    "linked:mka2": "armor.equip_netherite",
    "linked:mkl2": "armor.equip_netherite",
    "linked:mkcg2": "armor.equip_netherite",
    
    "linked:mkh": "armor.equip_netherite",
    "linked:mka": "armor.equip_netherite",
    "linked:mkl": "armor.equip_netherite",
    "linked:mkcg": "armor.equip_netherite",
    
    "linked:dsws": "armor.equip_netherite",
    "linked:dswa": "armor.equip_netherite",
    "linked:dsl": "armor.equip_netherite",
    "linked:dswg": "armor.equip_netherite",
    
    "linked:vgh": "armor.equip_netherite",
    "linked:vga": "armor.equip_netherite",
    "linked:vgl": "armor.equip_netherite",
    "linked:vgg": "armor.equip_netherite",
    
    "linked:htgh": "armor.equip_netherite",
    "linked:hta": "armor.equip_netherite",
    "linked:htl": "armor.equip_netherite",
    "linked:htg": "armor.equip_netherite",
    
    "linked:sotuh": "armor.equip_netherite",
    "linked:sotua": "armor.equip_netherite",
    "linked:sotul": "armor.equip_netherite",
    "linked:sotug": "armor.equip_netherite",
    
    "linked:agh": "armor.equip_netherite",
    "linked:aga": "armor.equip_netherite",
    "linked:agl": "armor.equip_netherite",
    "linked:agg": "armor.equip_netherite",
    
    "linked:wka": "armor.equip_netherite",
    "linked:wka2": "armor.equip_netherite",
    "linked:wkl": "armor.equip_netherite",
    "linked:wkg": "armor.equip_netherite",
    
    "linked:nkh": "armor.equip_netherite",
    "linked:nka": "armor.equip_netherite",
    "linked:nkl": "armor.equip_netherite",
    "linked:nkg": "armor.equip_netherite",
    
    "linked:ika2": "armor.equip_netherite",
    "linked:ika": "armor.equip_netherite",
    "linked:ikl": "armor.equip_netherite",
    "linked:ikg": "armor.equip_netherite",
    
    "linked:mkh3_1": "armor.equip_netherite",
    "linked:mka3_1": "armor.equip_netherite",
    "linked:mkl3_1": "armor.equip_netherite",
    "linked:mkcg3_1": "armor.equip_netherite",
    
    "linked:mkh2_1": "armor.equip_netherite",
    "linked:mka2_1": "armor.equip_netherite",
    "linked:mkl2_1": "armor.equip_netherite",
    "linked:mkcg2_1": "armor.equip_netherite",
    
    "linked:koogh": "armor.equip_netherite",
    "linked:kooa": "armor.equip_netherite",
    "linked:kool": "armor.equip_netherite",
    "linked:koog": "armor.equip_netherite",
    
    "linked:mkh3": "armor.equip_netherite",
    "linked:mka3": "armor.equip_netherite",
    "linked:mkl3": "armor.equip_netherite",
    "linked:mkcg3": "armor.equip_netherite",
    
    // Tier 3
    "linked:ih": "armor.equip_netherite",
    "linked:ia": "armor.equip_netherite",
    "linked:il": "armor.equip_netherite",
    "linked:ig": "armor.equip_netherite",
    
        
    // Tier 4
    "linked:ih2": "armor.equip_netherite",
    "linked:ia2": "armor.equip_netherite",
    "linked:il2": "armor.equip_netherite",
    "linked:ig2": "armor.equip_netherite"
};

//// tracker
const playerArmorState = new Map();

function getPlayerArmorState(playerId) {
    if (!playerArmorState.has(playerId)) {
        playerArmorState.set(playerId, {
            head: null,
            chest: null,
            legs: null,
            feet: null
        });
    }
    return playerArmorState.get(playerId);
}

/////
function checkArmorEquip(player) {
    const equipment = player.getComponent("minecraft:equippable");
    if (!equipment) return;
    
    const playerId = player.id;
    const previousState = getPlayerArmorState(playerId);
    
    // Get current armor
    const currentHelmet = equipment.getEquipment(EquipmentSlot.Head);
    const currentChest = equipment.getEquipment(EquipmentSlot.Chest);
    const currentLegs = equipment.getEquipment(EquipmentSlot.Legs);
    const currentBoots = equipment.getEquipment(EquipmentSlot.Feet);
    
    // Check helmet
    const helmetId = currentHelmet?.typeId || null;
    if (helmetId !== previousState.head && helmetId && ARMOR_SOUNDS[helmetId]) {
        player.playSound(ARMOR_SOUNDS[helmetId], {
            volume: 1.0,
            pitch: 1.0
        });
    }
    previousState.head = helmetId;
    
    // Check chestplate
    const chestId = currentChest?.typeId || null;
    if (chestId !== previousState.chest && chestId && ARMOR_SOUNDS[chestId]) {
        player.playSound(ARMOR_SOUNDS[chestId], {
            volume: 1.0,
            pitch: 1.0
        });
    }
    previousState.chest = chestId;
    
    // Check leggings
    const legsId = currentLegs?.typeId || null;
    if (legsId !== previousState.legs && legsId && ARMOR_SOUNDS[legsId]) {
        player.playSound(ARMOR_SOUNDS[legsId], {
            volume: 1.0,
            pitch: 1.0
        });
    }
    previousState.legs = legsId;
    
    // Check boots
    const bootsId = currentBoots?.typeId || null;
    if (bootsId !== previousState.feet && bootsId && ARMOR_SOUNDS[bootsId]) {
        player.playSound(ARMOR_SOUNDS[bootsId], {
            volume: 1.0,
            pitch: 1.0
        });
    }
    previousState.feet = bootsId;
}

system.runInterval(() => {
    for (const player of world.getAllPlayers()) {
        try {
            checkArmorEquip(player);
        } catch (error) {
            console.warn("[Armor Sound] Error:", error);
        }
    }
}, 1);