/* Lab LIMS - Service Worker - Enhanced for Offline Support */
const CACHE_NAME = 'lab-lims-v2';
const STATIC_ASSETS = [
  '/',
  '/index.php',
  '/styles.css',
  '/portal.css',
  '/js/offline-sync.js',
  'https://cdn.jsdelivr.net/npm/chart.js',
  'https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;600;700;800&display=swap'
];

self.addEventListener('install', (e) => {
  e.waitUntil(
    caches.open(CACHE_NAME).then((cache) => {
      return cache.addAll(STATIC_ASSETS).catch(() => {});
    }).then(() => self.skipWaiting())
  );
});

self.addEventListener('activate', (e) => {
  e.waitUntil(
    caches.keys().then((keys) => {
      return Promise.all(
        keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k))
      );
    }).then(() => self.clients.claim())
  );
});

self.addEventListener('fetch', (e) => {
  const url = new URL(e.request.url);
  
  // API requests - لا نخزنها، فقط نمررها
  if (url.pathname.includes('/api/')) {
    e.respondWith(
      fetch(e.request).catch(() => {
        // عند الأوفلاين، نرجع رد افتراضي للـ API
        return new Response(JSON.stringify({ 
          success: false, 
          error: 'لا يوجد اتصال بالإنترنت',
          offline: true 
        }), {
          headers: { 'Content-Type': 'application/json' }
        });
      })
    );
    return;
  }
  
  // GET requests فقط - للكاش
  if (e.request.method !== 'GET') return;
  
  // الصفحات والملفات الثابتة
  if (url.pathname.includes('index.php') || 
      url.pathname.endsWith('.css') || 
      url.pathname.endsWith('.js') ||
      url.pathname === '/' ||
      url.pathname.endsWith('.html')) {
    e.respondWith(
      fetch(e.request)
        .then((response) => {
          // نسخ الاستجابة للكاش
          const responseClone = response.clone();
          caches.open(CACHE_NAME).then((cache) => {
            cache.put(e.request, responseClone);
          });
          return response;
        })
        .catch(() => {
          // عند الأوفلاين، نرجع من الكاش
          return caches.match(e.request).then((r) => {
            if (r) return r;
            // إذا لم نجد في الكاش، نرجع الصفحة الرئيسية
            return caches.match('/').then((home) => home || caches.match('/index.php'));
          });
        })
    );
  }
});
