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

const targetEntities = [];

system.afterEvents.scriptEventReceive.subscribe((data) => {
  if (data.id === "tvf_randev:get_target") {
    if (data.sourceEntity) {
      targetEntities.push(data.sourceEntity);
    }
  }
});

system.runInterval(() => {
  while (targetEntities.length > 0) {
    const entity = targetEntities.shift();
    hypnosis(entity);
  }
}, 20);

function hypnosis(player) {
  player.addEffect("slowness", 22, { amplifier: 5 });
  system.runTimeout(() => {
    player.addEffect("nausea", 20 * 5);
  }, 10);
}

//sighted_helmet
const helmetUsers = new Map(); // key: player.id, value: true (если шлем надет)

const helmetId = "tvf_randev:sighted_helmet";

system.runInterval(() => {
  const players = world.getAllPlayers();
  const onlineIds = new Set(players.map((p) => p.id));

  for (const player of players) {
    const eq = player.getComponent(EntityComponentTypes.Equippable);
    if (!eq) continue;

    const itemStack = eq.getEquipment(EquipmentSlot.Head);
    const hasHelmet = itemStack?.typeId === helmetId;
    const hadHelmet = helmetUsers.has(player.id);

    const effect = player.getEffect("night_vision");
    const effectMissing = !effect;

    if (hasHelmet) {
      if (!hadHelmet) {
        // Первый раз надел — применяем эффект
        helmetUsers.set(player.id, true);
        HelmetEffect(player);
      } else if (effectMissing) {
        // Эффект исчез (например, после смерти), но шлем всё ещё надет
        HelmetEffect(player);
      }
    } else if (hadHelmet) {
      // Шлем снят — убираем эффект
      helmetUsers.delete(player.id);
      ClearEffect(player);
    }
  }

  // Очистка записей об игроках, которые вышли
  for (const id of helmetUsers.keys()) {
    if (!onlineIds.has(id)) {
      helmetUsers.delete(id);
    }
  }
}, 10);

// Эффекты
function ClearEffect(player) {
  player.removeEffect("night_vision");
}

function HelmetEffect(player) {
  player.addEffect("night_vision", 20000000);
}
