const CACHE_NAME = 'pedagog-ai-v11';
const urlsToCache = [
  '/',
  '/index.html',
  '/style.css',
  '/app.js',
  '/manifest.json',
  '/assets/icon-192.png',
  '/assets/icon-512.png',
  '/assets/pedagog_user.png',
  '/assets/pedagog_ia.png'
];

// Instalação - abre cache e armazena os arquivos iniciais
self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then((cache) => {
        console.log('Pedagog AI SW: Armazenando cache inicial');
        return cache.addAll(urlsToCache);
      })
      .then(() => self.skipWaiting())
  );
});

// Ativação - limpa caches antigos
self.addEventListener('activate', (event) => {
  event.waitUntil(
    caches.keys().then((cacheNames) => {
      return Promise.all(
        cacheNames.map((cacheName) => {
          if (cacheName !== CACHE_NAME) {
            console.log('Pedagog AI SW: Removendo cache antigo:', cacheName);
            return caches.delete(cacheName);
          }
        })
      );
    }).then(() => self.clients.claim())
  );
});

// Interceptador de requisições: Network-First para arquivos de código, Cache-First para mídias/assets
self.addEventListener('fetch', (event) => {
  if (event.request.method !== 'GET') return;

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

  // Ignora requisições de API e chamadas externas (não as intercepta)
  if (url.pathname.startsWith('/api') || !url.origin.startsWith(self.location.origin)) {
    return;
  }

  const isAsset = url.pathname.endsWith('.png') || 
                  url.pathname.endsWith('.jpg') || 
                  url.pathname.endsWith('.jpeg') || 
                  url.pathname.endsWith('.gif') || 
                  url.pathname.endsWith('.ico') || 
                  url.pathname.endsWith('.svg') || 
                  url.pathname.includes('/assets/');

  if (isAsset) {
    // Cache-First para imagens, ícones e mídias estáticas
    event.respondWith(
      caches.match(event.request).then((cachedResponse) => {
        if (cachedResponse) return cachedResponse;

        return fetch(event.request).then((networkResponse) => {
          if (networkResponse && networkResponse.status === 200) {
            const responseToCache = networkResponse.clone();
            caches.open(CACHE_NAME).then((cache) => {
              cache.put(event.request, responseToCache);
            });
          }
          return networkResponse;
        });
      })
    );
  } else {
    // Network-First para HTML, CSS, JS e manifest (garante código sempre atualizado pós-deploy)
    event.respondWith(
      fetch(event.request)
        .then((networkResponse) => {
          if (networkResponse && networkResponse.status === 200) {
            const responseToCache = networkResponse.clone();
            caches.open(CACHE_NAME).then((cache) => {
              cache.put(event.request, responseToCache);
            });
          }
          return networkResponse;
        })
        .catch(() => {
          // Se estiver offline, serve do cache
          return caches.match(event.request);
        })
    );
  }
});