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

const estadoPorJugador = new Map();

export function specialarmors(setsDeArmadura) {
  system.runInterval(() => {
    for (const player of world.getPlayers()) {
      const id = player.id;
      const pos = player.location;
      const equip = player.getComponent(EntityEquippableComponent.componentId);
      const health = player.getComponent("health");
      if (!equip || !health) continue;

      const estado = estadoPorJugador.get(id) ?? {
        ultimaPos: { ...pos },
        datos: {}
      };

      const seMovio =
        Math.abs(estado.ultimaPos.x - pos.x) > 0.01 ||
        Math.abs(estado.ultimaPos.y - pos.y) > 0.01 ||
        Math.abs(estado.ultimaPos.z - pos.z) > 0.01;

      for (const set of setsDeArmadura) {
        const estadoSet = estado.datos[set.id] ?? { quieto: 0 };

        const tieneSet = set.verificar(equip);

        // Si el set tiene una función de actualización constante
        if (set.actualizar && tieneSet) {
          set.actualizar(player, estadoSet);
        }

        // Si requiere estar quieto
        if (set.accion) {
          if (seMovio) {
            estadoSet.quieto = 0;
          } else {
            estadoSet.quieto++;
            if (estadoSet.quieto >= set.intervaloTicks) {
              estadoSet.quieto = 0;
              if (tieneSet) set.accion(player, health);
            }
          }
        }

        estado.datos[set.id] = estadoSet;
      }

      estado.ultimaPos = { ...pos };
      estadoPorJugador.set(id, estado);
    }
  }, 1);
}

