

const CACHE_NAME_APP = 'pefir-v3.2.4'; //self.APP_VERSION_APP;
console.log(CACHE_NAME_APP); // Esto imprimirá el nombre del caché con la fecha formateada
const urlsToCacheApp = [
  'index.html',
  'login.html',
  'home.html',
  'settings.html',
  'especificos.html',
  'genericos.html',
  'personalizados.html',
  'manifest.json',
  'charts.html',
  'imglogs.html',
  'chEncuesta.html',
  'chAdherencia.html',
  'chEjercicios.html',
  'chEvaTiempo.html',
  'accesos.html',
  'imgurls.html',
  'traductor.html',
  'ejercicio.html',
  'geolocalizacion.html',
  'ipubicacion.html',
  'chVideos.html',
  'chCategorias.html',
  'chaGlobal.html',
  'js/indexpdf.js',
  'js/varapp.js',
  'js/pdfcreator.js',
  'css/especificos.css',
  'css/genericos.css',
  'protocolo.html',
  'actividad.html',
  'uso.html',
  'mapa.html',
  'mapaVideo.html',
  'recursos.html',
  'encuesta.html',
  'ejercicioPdf.html',
  'pdfAleatorio.html',
  'biblioteca_check.html',
  'chIps.html',
  'chIpsHora.html',
  'about.html'
  //'json/traducciones.json'
];

////////////////////////////////
//const APP_VERSION = "1.0.5"; // cámbialo en cada despliegue

self.addEventListener("install", event => {
  event.waitUntil(
    caches.open(CACHE_NAME_APP)
      .then(cache => cache.addAll(urlsToCacheApp))
      .then(() => self.skipWaiting())
  );
});

self.addEventListener("activate", event => {
  event.waitUntil(
    caches.keys().then(keys =>
      Promise.all(keys.map(key => caches.delete(key)))
    )
  );
  self.clients.claim();
  // Envía la versión a todos los clientes controlados
  self.clients.matchAll().then(clients => {
    clients.forEach(client => {
      client.postMessage({ version: CACHE_NAME_APP });
    });
  });
});

self.addEventListener("statechange", () => {
  self.clients.matchAll().then(clients => {
    clients.forEach(client => client.postMessage({ version: CACHE_NAME_APP }));
  });
});

////////////////////////////////


self.addEventListener('fetch', (event) => {

  if (event.request.method !== 'GET') return;

  const url = new URL(event.request.url);

  // Ignorar protocolos no http/https
  if (url.protocol !== 'http:' && url.protocol !== 'https:') return;

  // Dejar que el navegador gestione navegaciones HTML directamente
  if (event.request.mode === 'navigate') return;
  if (event.request.destination === 'document') return;
  if (url.pathname.endsWith('.html')) return;

  // No interceptar llamadas a PHP/API — siempre deben ir a red
  if (url.pathname.endsWith('.php')) return;

  event.respondWith(
    caches.match(event.request)
      .then((cachedResponse) => {

        if (cachedResponse) return cachedResponse;

        return fetch(event.request)
          .then((networkResponse) => {

            if (!networkResponse || networkResponse.status !== 200) {
              return networkResponse;
            }

            const responseToCache = networkResponse.clone();
            caches.open(CACHE_NAME_APP)
              .then((cache) => {
                cache.put(event.request, responseToCache);
              })
              .catch(console.warn);

            return networkResponse;
          });
      })
  );
});


///////////////////////////////////////////////////////////////////////////////////////


// Comunicación con el cliente para obtener la versión
self.addEventListener('message', (event) => {
  if (event.data === 'GET_VERSION') {
    event.source.postMessage({ version: CACHE_NAME_APP });
  }
});
