(function () {
  const ruleta = document.getElementById("ruleta");
  const puntero = document.getElementById("puntero");

  // Modal confirmación
  const confirmModal = document.getElementById("confirm-modal");
  const confirmYes = document.getElementById("confirm-yes");
  const confirmNo = document.getElementById("confirm-no");

  // Modal agradecimiento
  const thankModal = document.getElementById("thank-you-modal");
  const thankTitle = document.getElementById("thank-you-message");
  const thankDetails = document.getElementById("thank-you-details");
  const thankCloseBtn = document.getElementById("redirect-button");

  // Fullscreen
  const fullscreenBtn = document.getElementById("fullscreen-btn");

  let gira = 0;
  let articuloGanador = "";
  let estaGirando = false;

  const params = new URLSearchParams(window.location.search);
  const ruletaId = parseInt(params.get("ruleta_id") || "1", 10) || 1;

  // Fallback local (solo si backend no manda ángulos)
  const rangosFallback = [
    { articulo: "Freidora de aire", inicio: 330, final: 16 },
    { articulo: "Articulo plastico", inicio: 15, final: 16 },
    { articulo: "Sandwichera", inicio: 150, final: 196 },
    { articulo: "Bandana", inicio: 170, final: 16 },
    { articulo: "Cubeta", inicio: 20, final: 52 },
    { articulo: "Bandana1", inicio: 42, final: 88 },
    { articulo: "Beggin'", inicio: 130, final: 160 },
    { articulo: "Sobre Pro Plan", inicio: 220, final: 232 },
    { articulo: "Plancha", inicio: 150, final: 232 },
    { articulo: "Caldero", inicio: 30, final: 194 },
    { articulo: "Abanico de piso", inicio: 296, final: 328 },
  ];

  function normaliza(a){ return ((a % 360) + 360) % 360; }
  function centro(inicio, fin){
    const i = normaliza(inicio), f = normaliza(fin);
    if (i === f) return i;
    if (i < f) return i + (f - i)/2;
    const span = 360 - i + f;
    return normaliza(i + span/2);
  }
  function buscarRangoLocal(nombre){
    return rangosFallback.find(r => r.articulo.toLowerCase() === String(nombre).toLowerCase());
  }

  function mostrarConfirmacion(){ confirmModal.style.display = "block"; }
  function cerrarConfirmacion(){ confirmModal.style.display = "none"; }

  function mostrarAgradecimiento(nombre){
    thankTitle.textContent = "🎊🎉¡Felicidades!🎉🎊";
    thankDetails.textContent = `🎁 Has ganado "${nombre}" 🎁`;
    thankModal.style.display = "flex";
  }
  function ocultarAgradecimiento(){ thankModal.style.display = "none"; }

  function girarA(angulo){
    gira = 1440 + normaliza(angulo); // 4 vueltas + objetivo
    estaGirando = true;
    puntero.style.pointerEvents = "none";
    ruleta.style.transition = "all 5s ease-out";
    ruleta.style.transform = `rotate(${gira}deg)`;
  }

  ruleta.addEventListener("transitionend", function () {
    ruleta.style.transition = "none";
    ruleta.style.transform = `rotate(${normaliza(gira)}deg)`;
    estaGirando = false;
    puntero.style.pointerEvents = "auto";
    lanzarConfeti();
    mostrarAgradecimiento(articuloGanador);
  });

  async function obtenerIP() {
    try {
      const r = await fetch("https://api.ipify.org?format=json");
      const d = await r.json();
      return d.ip || "0.0.0.0";
    } catch { return "0.0.0.0"; }
  }

  async function obtenerArticuloGanadorYSpin() {
    const userAgent = navigator.userAgent || "unknown";
    const ip = await obtenerIP();

    try {
      const resp = await fetch("api/seleccionar_premio.php", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          user_agent: userAgent,
          ip_address: ip,
          ruleta_id: ruletaId,
        }),
      });
      if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
      const data = await resp.json();

      // data esperado:
      // { ok:true, nombre:"X", inicio:120, fin:160 }  (inicio/fin opcionales)
      articuloGanador = data.nombre || "Premio";

      let angulo = null;
      if (typeof data.inicio === "number" && typeof data.fin === "number") {
        angulo = centro(data.inicio, data.fin);
      } else {
        const rango = buscarRangoLocal(articuloGanador);
        angulo = rango ? centro(rango.inicio, rango.final) : Math.floor(Math.random() * 360);
      }

      girarA(angulo);
    } catch (err) {
      console.error("Error al obtener el artículo ganador:", err);
      estaGirando = false;
      puntero.style.pointerEvents = "auto";
      alert("Hubo un problema al obtener el premio. Intenta de nuevo.");
    }
  }

  // Interacciones
  puntero.addEventListener("mousedown", function () {
    if (estaGirando) return;
    mostrarConfirmacion();
  });
  confirmYes.addEventListener("click", function () {
    cerrarConfirmacion();
    if (estaGirando) return;
    obtenerArticuloGanadorYSpin();
  });
  confirmNo.addEventListener("click", function () {
    cerrarConfirmacion();
  });
  thankCloseBtn.addEventListener("click", ocultarAgradecimiento);

  // Fullscreen
  fullscreenBtn.addEventListener("click", () => {
    if (!document.fullscreenElement) {
      document.documentElement.requestFullscreen().catch(console.error);
    } else {
      document.exitFullscreen().catch(console.error);
    }
  });

  // Confeti
  function lanzarConfeti() {
    const duration = 4000;
    const end = Date.now() + duration;
    (function frame() {
      confetti({ particleCount: 7, angle: 60, spread: 55, origin: { x: 0 }, scalar: 1.2 });
      confetti({ particleCount: 7, angle: 120, spread: 55, origin: { x: 1 }, scalar: 1.2 });
      if (Date.now() < end) requestAnimationFrame(frame);
    })();
  }
})();
