// Función para obtener el valor de un parámetro de la URL
function getUrlParameterXX(name) {
  name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]')
  const regex = new RegExp('[\\?&]' + name + '=([^&#]*)'),
    results = regex.exec(location.search)
  return results === null
    ? ''
    : decodeURIComponent(results[1].replace(/\+/g, ' '))
}

function getUrlParameter(name) {
  name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]')
  const regex = new RegExp('[\\?&]' + name + '=([^&#]*)', 'i'),
    results = regex.exec(location.search)
  return results === null
    ? ''
    : decodeURIComponent(results[1].replace(/\+/g, ' '))
}

// Función para cargar datos desde el servidor
function cargarDatosDesdeServidor() {
  // Si es "Nueva sesión", no cargar datos desde el servidor
  console.log('NS: ', getUrlParameter('NS'))
  if (getUrlParameter('NS') == '') {
    console.log('Cargando datos desde el servidor...')
    let nombreArchivo = getUrlParameter('nombre')
    if (nombreArchivo == '') {
      nombreArchivo = getUrlParameter('n')
    }
    console.log('nombreArchivo:', nombreArchivo)
    let url = 'manejoDeSesiones.php'
    if (nombreArchivo != '') {
      url += '?nombre=' + encodeURIComponent(nombreArchivo) + '&_t=' + new Date().getTime()
    } else {
      url += '?_t=' + new Date().getTime()
    }
    fetch(url, { cache: 'no-store' })
      .then((response) => response.json())
      .then((data) => {
        datosCarga = data
        console.log('DATA: ', data)
        console.log('eeeeee')
        console.log(
          'TAMAÑO DATOS: ',
          data.data.size,
          data.status,
          data.data.arregloGeneral,
          typeof data.data.arregloGeneral
        )

        if (
          typeof data.data.arregloGeneral !== undefined &&
          data.status === 'success'
        ) {
          console.log('Datos cargados exitosamente desde el servidor')
          arregloGeneral = data.data.arregloGeneral
          // --- INICIO DEL PARCHE para ganancias por trimestre ---
          if (typeof arregloGeneral.trimestre1 === 'undefined') {
            arregloGeneral.trimestre1 = 0
          }
          if (typeof arregloGeneral.trimestre2 === 'undefined') {
            arregloGeneral.trimestre2 = 0
          }
          if (typeof arregloGeneral.trimestre3 === 'undefined') {
            arregloGeneral.trimestre3 = 0
          }
          if (typeof arregloGeneral.trimestre4 === 'undefined') {
            arregloGeneral.trimestre4 = 0
          }
          // --- FIN DEL PARCHE ---
          arreglosCapacitaciones = data.data.arreglosCapacitaciones
          arreglosActivos = data.data.arreglosActivos
          arreglosDeptos = data.data.arreglosDeptos
          proyectos = data.data.proyectos
          // Si el estado guardado contiene el ID del proyecto grande, lo cargamos.
          if (data.data.arregloGeneral.hasOwnProperty('proyectoGdeActual')) {
            proyectoGdeActual = data.data.arregloGeneral.proyectoGdeActual
          } else {
            proyectoGdeActual = '' // Limpiamos por si no viene en el archivo de guardado.
          }
          console.log(arregloGeneral)
          console.log(arreglosDeptos)

          continuamos()
        } else if (
          data.status === 'error' &&
          data.data.message === 'File not found'
        ) {
          console.log(
            'El archivo de sesión no existe. Usando arreglos predefinidos.'
          )
          continuamos()
          // Usar los arreglos definidos en colaborando_arreglos.js
          guardarDatosEnServidor() // Guardar los arreglos predefinidos
        } else {
          console.error('Error cargando los datos:', data.data.message)
          console.error('Data:', data)
        }
      })
      .catch(
        (error) =>
          function () {
            console.log('Error:', error)
          }
      )
  } else if (getUrlParameter('NS') == '1') {
    // Usar los arreglos definidos en colaborando_arreglos.js
    continuamos() //Creamos la nueva sesion
    guardarDatosEnServidor().then(() => {
      let url = new URL(window.location.href)
      url.searchParams.delete('NS') // Quitamos el parametro NS de el URL
      url.searchParams.delete('ns')
      console.log('REFRESCANDO SIN ')
      window.location.href = url.toString() // Refrescamos la pagina SIN el "NS"
    })
  } else {
    console.log(
      'No se cargan datos desde el servidor porque es una nueva sesión'
    )
    // Usar los arreglos definidos en colaborando_arreglos.js
    continuamos()
  }
}

// Función para guardar datos en el servidor
function guardarDatosEnServidor() {
  // Añadimos el ID del proyecto grande actual para que se guarde en la sesión.
  arregloGeneral.proyectoGdeActual = proyectoGdeActual

  const datos = {
    arregloGeneral,
    arreglosCapacitaciones,
    arreglosActivos,
    arreglosDeptos,
    proyectos,
  }

  console.log('Guardando datos en el servidor...')
  // console.log('TAMAÑO DATOS: ', datos.size)

  let nombreArchivo = getUrlParameter('nombre')
  if (nombreArchivo == '') {
    nombreArchivo = getUrlParameter('n')
  }
  let url = 'manejoDeSesiones.php'
  if (nombreArchivo != '') {
    url += '?nombre=' + encodeURIComponent(nombreArchivo)
  }

  return fetch(url, {
    method: 'POST',
    keepalive: true, // Asegura que la petición termine aunque se cierre la página
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ data: datos }),
  })
    .then((response) => response.json())
    .then((data) => {
      if (data.status === 'success') {
        console.log('Datos guardados exitosamente')
      } else {
        console.error('Error guardando los datos:', data.message)
      }
    })
    .catch((error) => console.error('Error:', error))
}

const guardaSesion = guardarDatosEnServidor;

// Cargar datos al iniciar la página
document.addEventListener('DOMContentLoaded', cargarDatosDesdeServidor)

// Guardar datos al cerrar la página
window.addEventListener('beforeunload', function () {
  guardarDatosEnServidor()
})

// Función global para alternar pantalla completa
function toggleFullscreen() {
  if (!document.fullscreenElement) {
    document.documentElement.requestFullscreen().catch((err) => {
      console.error(`Error al intentar activar pantalla completa: ${err.message}`);
    });
  } else {
    document.exitFullscreen();
  }
}

// Escuchar el cambio de estado de pantalla completa para actualizar el texto del botón
document.addEventListener('fullscreenchange', () => {
  const btn = document.getElementById('btnFullscreen');
  if (btn) {
    if (document.fullscreenElement) {
      btn.textContent = 'Salir Pantalla Completa';
    } else {
      btn.textContent = 'Pantalla Completa';
    }
  }
});
