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

const TICK_INTERVAL = 180; // cada 180 ticks (~9 segundos)
const PLAYER_RADIUS = 5;   // distancia para agrupar jugadores
const PARTICLE_ID = "pa:bruma_de_limbo";

// Función para calcular distancia
function getDistance(pos1, pos2) {
  const dx = pos1.x - pos2.x;
  const dy = pos1.y - pos2.y;
  const dz = pos1.z - pos2.z;
  return Math.sqrt(dx * dx + dy * dy + dz * dz);
}

// ✅ Comprueba si el jugador está dentro del rango permitido (solo positivo)
function isInBrumaRange(pos) {
  const x = pos.x;
  const z = pos.z;

  // Solo entre 20 000 y 30 000 en X o Z, y únicamente si son positivos
  return (
    ((x >= 20000 && x <= 30000) || (z >= 20000 && z <= 30000))
  );
}

// Ejecuta cada TICK_INTERVAL
system.runInterval(() => {
  const players = world.getPlayers().filter(p => p.dimension.id === "minecraft:the_end");
  const grouped = new Set();

  for (let i = 0; i < players.length; i++) {
    const p1 = players[i];
    if (grouped.has(p1.name)) continue;

    // ✅ Solo genera si está dentro del rango positivo permitido
    if (!isInBrumaRange(p1.location)) continue;

    // Crear grupo de jugadores cercanos
    const group = [p1];
    for (let j = i + 1; j < players.length; j++) {
      const p2 = players[j];
      if (grouped.has(p2.name)) continue;

      if (getDistance(p1.location, p2.location) <= PLAYER_RADIUS) {
        group.push(p2);
        grouped.add(p2.name);
      }
    }

    grouped.add(p1.name);

    // Generar partícula en la posición del jugador principal
    const pos = p1.location;
    p1.dimension.spawnParticle(PARTICLE_ID, pos);
  }
}, TICK_INTERVAL);