// 🔹 VARIABLES PARA AUDIO EN SEGUNDO PLANO
let audioBackground = false;
let currentUtterance = null;

document.addEventListener('DOMContentLoaded', () => {
  const selectMaterias = document.getElementById('materias');
  const btnVoz = document.getElementById('btn-voz');
  const progreso = document.getElementById('progreso');
  const progresoTexto = document.getElementById('progreso-texto');
  const btnVerPDF = document.getElementById('btn-ver-pdf');
  const visorPdf = document.getElementById('visor-pdf');
  const pdfFrame = document.getElementById('pdf-frame');
  const btnCerrarPDF = document.getElementById('cerrar-pdf');
  const btnVerMSA = document.getElementById('btn-ver-msa');

  let preguntas = [];
  let indice = 0;
  let speaking = false;

  // 🔹 INICIALIZAR AUDIO BACKGROUND
  inicializarAudioBackground();

  // 🔹 Cargar materias
  fetch('get_materias.php')
    .then(response => response.text())
    .then(data => {
      selectMaterias.innerHTML += data;
    });

  // 🔹 Limpiar numeración tipo "45. pregunta" => "pregunta"
  function limpiarPregunta(texto) {
    return texto.replace(/^\s*\d+\.\s*/, '');
  }

  // 🔹 Construir pregunta completa
  function construirPreguntaCompleta(pregunta) {
    let textoCompleto = limpiarPregunta(pregunta.pregunta || '');
    
    if (pregunta.pregunta_a && pregunta.pregunta_a.trim() !== '') {
      textoCompleto += ' ' + pregunta.pregunta_a.trim();
    }
    
    if (pregunta.pregunta_b && pregunta.pregunta_b.trim() !== '') {
      textoCompleto += ' ' + pregunta.pregunta_b.trim();
    }
    
    return textoCompleto;
  }

  // 🔹 Leer con voz - VERSIÓN CON AUDIO BACKGROUND
  function leerPregunta() {
    if (!speaking || indice >= preguntas.length) return;

    const p = preguntas[indice];
    const correcta = parseInt(p.correcta_rpta);
    const preguntaCompleta = construirPreguntaCompleta(p);
    const texto = `Pregunta ${indice + 1}: ${preguntaCompleta}. Respuesta correcta: ${p["opcion" + correcta]}`;

    // 🟢 Mostrar en pantalla
    const divPregunta = document.getElementById('pregunta-actual');
    if (divPregunta) {
      divPregunta.textContent = texto;
    }

    // 🗣️ Leer con audio background
    leerTextoBackground(texto, () => {
      indice++;
      if (indice < preguntas.length && speaking) {
        progreso.value = indice;
        progresoTexto.textContent = `${indice + 1} / ${preguntas.length}`;
        guardarProgreso();
        // Pequeña pausa entre preguntas
        setTimeout(() => {
          if (speaking) {
            leerPregunta();
          }
        }, 500);
      } else {
        speaking = false;
        habilitarControles();
        actualizarBotonReproduccion();
        detenerSintesisCompleta();
      }
    });
  }

  // 🔹 Guardar progreso por materia
  function guardarProgreso() {
    const materia = selectMaterias.value;
    if (materia) {
      localStorage.setItem(`progreso_${materia}`, indice);
    }
  }

  // 🔹 Obtener progreso guardado
  function obtenerProgreso(materia) {
    return parseInt(localStorage.getItem(`progreso_${materia}`)) || 0;
  }

  // 🔹 Deshabilitar controles durante lectura
  function deshabilitarControles() {
    selectMaterias.disabled = true;
    btnVoz.disabled = false;
  }

  // 🔹 Habilitar controles después de lectura
  function habilitarControles() {
    selectMaterias.disabled = false;
    btnVoz.disabled = false;
  }

  // 🔹 Cambiar texto y color del botón
  function actualizarBotonReproduccion() {
    if (speaking) {
      btnVoz.textContent = "Stop";
      btnVoz.classList.remove("azul");
      btnVoz.classList.add("rojo");
    } else {
      btnVoz.textContent = "Play";
      btnVoz.classList.remove("rojo");
      btnVoz.classList.add("azul");
    }
  }

  // 🔹 Click en el botón (Play / Stop)
  btnVoz.addEventListener('click', () => {
    if (!speaking) {
      const materia = selectMaterias.value;
      if (!materia) {
        Swal.fire({
          icon: 'warning',
          title: 'Seleccione una materia',
          text: 'Debe seleccionar una materia antes de reproducir el audio.',
          width: '400px'
        });
        return;
      }

      const guardado = obtenerProgreso(materia);
      if (guardado > 0) {
        Swal.fire({
          title: 'Progreso guardado',
          text: `Tienes un avance en esta materia. ¿Deseas continuar desde la pregunta ${guardado + 1} ?`,
          icon: 'question',
          showCancelButton: true,
          confirmButtonText: 'Sí, continuar',
          cancelButtonText: 'No, empezar de nuevo',
          width: '400px'
        }).then((result) => {
          indice = result.isConfirmed ? guardado : 0;
          iniciarLectura(materia);
        });
      } else {
        indice = 0;
        iniciarLectura(materia);
      }
    } else {
      // Detener lectura completamente
      speaking = false;
      detenerSintesisCompleta();
      habilitarControles();
      actualizarBotonReproduccion();
    }
  });

  // 🔹 Función que arranca la lectura
  function iniciarLectura(materia) {
    fetch(`obtener_preguntasM2.php?materia_id=${materia}`)
      .then(res => res.json())
      .then(data => {
        if (!data.length) {
          Swal.fire({
            icon: 'error',
            title: 'Sin preguntas',
            text: 'No hay preguntas disponibles para esta materia.',
            width: '400px'
          });
          return;
        }

        preguntas = data;
        speaking = true;

        progreso.max = preguntas.length - 1;
        progreso.value = indice;
        progreso.disabled = false;
        progresoTexto.textContent = `${indice + 1} / ${preguntas.length}`;

        deshabilitarControles();
        actualizarBotonReproduccion();
        
        // Mostrar mensaje si el audio background está habilitado
        if (audioBackground) {
          Swal.fire({
            icon: 'info',
            title: 'Audio en Segundo Plano Activado',
            text: 'La lectura continuará aunque apagues la pantalla.',
            timer: 3000,
            showConfirmButton: false
          });
        }
        
        leerPregunta();
      })
      .catch(error => {
        console.error('Error al cargar preguntas:', error);
        Swal.fire({
          icon: 'error',
          title: 'Error',
          text: 'Hubo un problema al cargar las preguntas.',
          width: '400px'
        });
      });
  }

  // 🔹 Cambiar valor con la barra de progreso
  progreso.addEventListener('input', () => {
    indice = parseInt(progreso.value);
    progresoTexto.textContent = `${indice + 1} / ${preguntas.length}`;
    guardarProgreso();
    if (speaking) {
      detenerSintesisCompleta();
      setTimeout(() => {
        if (speaking) {
          leerPregunta();
        }
      }, 200);
    }
  });

  // 🔹 Mostrar PDF
  btnVerPDF.addEventListener('click', () => {
    const materia = selectMaterias.value;
    if (!materia) {
      Swal.fire({
        icon: 'warning',
        title: 'Seleccione una materia',
        text: 'Debe seleccionar una materia para visualizar el PDF.',
        width: '400px'
      });
      return;
    }

    const rutaPDF = `doc_pdf/${materia}.pdf`;
    pdfFrame.src = rutaPDF;
    visorPdf.style.display = 'block';
  });

  // 🔹 Cerrar visor PDF
  btnCerrarPDF.addEventListener('click', () => {
    visorPdf.style.display = 'none';
    pdfFrame.src = '';
  });

  // 🔹 Cambiar de materia: actualizar PDF y progreso
  selectMaterias.addEventListener('change', () => {
    const materia = selectMaterias.value;

    if (visorPdf.style.display === 'block' && materia) {
      const nuevaRuta = `doc_pdf/${materia}.pdf`;
      pdfFrame.src = nuevaRuta;
    }

    if (materia) {
      fetch(`obtener_preguntasM2.php?materia_id=${materia}`)
        .then(res => res.json())
        .then(data => {
          const totalPreguntas = data.length;
          progreso.max = totalPreguntas - 1;
          progreso.value = 0;
          progresoTexto.textContent = `0 / ${totalPreguntas}`;
        })
        .catch(error => {
          console.error('Error al cargar información de la materia:', error);
        });
    } else {
      progresoTexto.textContent = `0 / 0`;
      progreso.value = 0;
      progreso.max = 0;
    }
  });

  // 🔹 Mostrar archivo MSA
  btnVerMSA.addEventListener('click', () => {
    const rutaMSA = 'doc_pdf/MSA 2025.pdf';
    pdfFrame.src = rutaMSA;
    visorPdf.style.display = 'block';
  });

  // 🔹 Limpiar al cerrar la página
  window.addEventListener('beforeunload', () => {
    detenerSintesisCompleta();
  });
});

// 🔹 FUNCIONES PARA AUDIO EN SEGUNDO PLANO

function cargarConfiguracionAudioBackground() {
  const configuracion = localStorage.getItem('lecturaConPantallaApagada');
  audioBackground = configuracion === 'true' || configuracion === true;
  console.log('Audio en segundo plano habilitado:', audioBackground);
}

function configurarSpeechSynthesisBackground() {
  if (!audioBackground) return;
  
  document.addEventListener('visibilitychange', () => {
    if (document.visibilityState === 'hidden' && currentUtterance) {
      console.log('Página oculta - manteniendo síntesis de voz activa');
      
      if (!window.audioContextBackground) {
        try {
          window.audioContextBackground = new (window.AudioContext || window.webkitAudioContext)();
          const oscillator = window.audioContextBackground.createOscillator();
          const gainNode = window.audioContextBackground.createGain();
          
          oscillator.connect(gainNode);
          gainNode.connect(window.audioContextBackground.destination);
          
          gainNode.gain.setValueAtTime(0.001, window.audioContextBackground.currentTime);
          oscillator.frequency.setValueAtTime(20000, window.audioContextBackground.currentTime);
          oscillator.start();
          
          console.log('Contexto de audio creado para mantener síntesis activa');
        } catch (e) {
          console.warn('No se pudo crear contexto de audio:', e);
        }
      }
    }
  });
  
  if (audioBackground && !window.backgroundKeepAlive) {
    window.backgroundKeepAlive = setInterval(() => {
      if (currentUtterance && window.speechSynthesis.speaking) {
        window.speechSynthesis.pause();
        setTimeout(() => {
          if (currentUtterance) {
            window.speechSynthesis.resume();
          }
        }, 10);
      }
    }, 30000);
  }
}

function leerTextoBackground(texto, callback = null) {
  if (!voces.length) cargarVoces();

  if (currentUtterance) {
    window.speechSynthesis.cancel();
    currentUtterance = null;
  }

  currentUtterance = new SpeechSynthesisUtterance(texto);

  const vozPreferida = localStorage.getItem('vozPreferida');
  const vozSeleccionada = voces.find(v => v.name === vozPreferida) || voces[0];
  currentUtterance.voice = vozSeleccionada;

  if (audioBackground) {
    currentUtterance.rate = 0.9;
    currentUtterance.pitch = 1.0;
    currentUtterance.volume = 1.0;
  }

  currentUtterance.onstart = () => {
    console.log('Síntesis iniciada - Audio background:', audioBackground);
    isSpeaking = true;
  };

  currentUtterance.onend = () => {
    console.log('Síntesis completada');
    isSpeaking = false;
    currentUtterance = null;
    if (typeof callback === 'function') callback();
  };

  currentUtterance.onerror = (e) => {
    console.error("Error en síntesis de voz:", e);
    isSpeaking = false;
    currentUtterance = null;
    
    if (audioBackground && e.error !== 'interrupted') {
      console.log('Reintentando síntesis...');
      setTimeout(() => {
        leerTextoBackground(texto, callback);
      }, 500);
      return;
    }
    
    if (typeof callback === 'function') callback();
  };

  window.speechSynthesis.cancel();
  
  setTimeout(() => {
    if (currentUtterance) {
      window.speechSynthesis.speak(currentUtterance);
      
      if (audioBackground) {
        configurarSpeechSynthesisBackground();
      }
    }
  }, 100);
}

function detenerSintesisCompleta() {
  if (currentUtterance) {
    currentUtterance.onend = null;
    currentUtterance = null;
  }
  
  window.speechSynthesis.cancel();
  isSpeaking = false;
  
  if (window.backgroundKeepAlive) {
    clearInterval(window.backgroundKeepAlive);
    window.backgroundKeepAlive = null;
  }
  
  if (window.audioContextBackground) {
    window.audioContextBackground.close();
    window.audioContextBackground = null;
  }
}

function inicializarAudioBackground() {
  cargarConfiguracionAudioBackground();
  
  window.addEventListener('storage', (e) => {
    if (e.key === 'lecturaConPantallaApagada') {
      cargarConfiguracionAudioBackground();
      console.log('Configuración de audio background actualizada desde otra pestaña');
    }
  });
  
  if (audioBackground) {
    configurarSpeechSynthesisBackground();
  }
  
  window.addEventListener('beforeunload', () => {
    detenerSintesisCompleta();
  });
}

// 🔹 FUNCIONES PARA PROFILES.PHP
function toggleLecturaConPantallaApagada(habilitado) {
  localStorage.setItem('lecturaConPantallaApagada', habilitado.toString());
  audioBackground = habilitado;
  
  console.log('Lectura con pantalla apagada:', habilitado ? 'HABILITADA' : 'DESHABILITADA');
  
  if (!habilitado) {
    if (window.backgroundKeepAlive) {
      clearInterval(window.backgroundKeepAlive);
      window.backgroundKeepAlive = null;
    }
    
    if (window.audioContextBackground) {
      window.audioContextBackground.close();
      window.audioContextBackground = null;
    }
  } else if (currentUtterance) {
    configurarSpeechSynthesisBackground();
  }
}

function obtenerEstadoLecturaConPantallaApagada() {
  const estado = localStorage.getItem('lecturaConPantallaApagada');
  return estado === 'true' || estado === true;
}