// CleanCacheMate - Service Worker
// Wird bei Klick auf das Extension-Icon ausgeführt

chrome.action.onClicked.addListener(async (tab) => {
  // Nur auf http/https Seiten ausführen
  if (!tab.url || (!tab.url.startsWith('http://') && !tab.url.startsWith('https://'))) {
    console.log('CleanCacheMate: Kann nur auf http/https Seiten ausgeführt werden');
    return;
  }

  try {
    // Content Script in den aktiven Tab injizieren
    await chrome.scripting.executeScript({
      target: { tabId: tab.id },
      func: cleanSiteData
    });

    // Hard-Refresh nach kurzer Verzögerung (damit Cleanup abgeschlossen ist)
    setTimeout(() => {
      chrome.tabs.reload(tab.id, { bypassCache: true });
    }, 100);

    // Visuelles Feedback: Badge kurz anzeigen
    chrome.action.setBadgeText({ text: '✓', tabId: tab.id });
    chrome.action.setBadgeBackgroundColor({ color: '#4CAF50', tabId: tab.id });
    setTimeout(() => {
      chrome.action.setBadgeText({ text: '', tabId: tab.id });
    }, 1500);

  } catch (error) {
    console.error('CleanCacheMate Fehler:', error);

    // Fehler-Badge anzeigen
    chrome.action.setBadgeText({ text: '!', tabId: tab.id });
    chrome.action.setBadgeBackgroundColor({ color: '#F44336', tabId: tab.id });
    setTimeout(() => {
      chrome.action.setBadgeText({ text: '', tabId: tab.id });
    }, 2000);
  }
});

// Diese Funktion wird im Kontext der Webseite ausgeführt
function cleanSiteData() {
  const results = {
    serviceWorkers: 0,
    localStorage: false,
    sessionStorage: false
  };

  // 1. Service Workers deregistrieren
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.getRegistrations().then(registrations => {
      registrations.forEach(registration => {
        registration.unregister();
        results.serviceWorkers++;
      });
      console.log(`CleanCacheMate: ${results.serviceWorkers} Service Worker(s) deregistriert`);
    });
  }

  // 2. LocalStorage leeren
  try {
    const localStorageLength = localStorage.length;
    localStorage.clear();
    results.localStorage = true;
    console.log(`CleanCacheMate: LocalStorage geleert (${localStorageLength} Einträge)`);
  } catch (e) {
    console.warn('CleanCacheMate: LocalStorage konnte nicht geleert werden', e);
  }

  // 3. SessionStorage leeren
  try {
    const sessionStorageLength = sessionStorage.length;
    sessionStorage.clear();
    results.sessionStorage = true;
    console.log(`CleanCacheMate: SessionStorage geleert (${sessionStorageLength} Einträge)`);
  } catch (e) {
    console.warn('CleanCacheMate: SessionStorage konnte nicht geleert werden', e);
  }

  console.log('CleanCacheMate: Cleanup abgeschlossen', results);
  return results;
}
