/**
 * KI-Shield Proxy — Safari-Glue für die Background-PAGE.
 *
 * Safari kennt chrome.offscreen nicht. Statt Service Worker + Offscreen-Dokument
 * läuft hier EINE Background-Page mit DOM und voller Extension-CSP; offscreen.js
 * und background.js liegen im selben Kontext (siehe safari-background.html).
 * Diese Datei liefert nur, was durch den Wegfall des Relays fehlt:
 *
 *   1. Job → Tab-Zuordnung. Der Extraktionsfortschritt muss zurück an das
 *      Content-Script des anfragenden Tabs. runtime.sendMessage kann das nicht
 *      — es adressiert ausschließlich Extension-Kontexte (Background/Popup/
 *      Offscreen), niemals Content-Scripts. Dafür ist tabs.sendMessage nötig,
 *      und das braucht eine tabId.
 *
 * Der Listener hört nur mit und antwortet nie (return false), damit er dem
 * eigentlichen Handler in background.js nicht die Antwort wegnimmt.
 */

(() => {
  'use strict';

  const jobTabs = new Map();

  chrome.runtime.onMessage.addListener((msg, sender) => {
    const jobId = msg && typeof msg.jobId === 'string' ? msg.jobId : null;
    const tabId = sender && sender.tab && typeof sender.tab.id === 'number'
      ? sender.tab.id
      : null;
    if (jobId && tabId !== null && msg.type === 'kishield-extract-start') {
      jobTabs.set(jobId, tabId);
    }
    if (jobId && msg.type === 'kishield-extract-release') {
      jobTabs.delete(jobId);
    }
    return false; // nur mithören — die Antwort gehört background.js
  });

  // Wird von offscreen.js/reportProgress bevorzugt genutzt, sobald gesetzt.
  self.KIShieldProgressSink = async (message) => {
    const tabId = jobTabs.get(message && message.jobId);
    if (typeof tabId !== 'number') return;
    try {
      await chrome.tabs.sendMessage(tabId, message);
    } catch (_) {
      // Tab geschlossen oder Content-Script nicht (mehr) da — Fortschritts-
      // anzeige ist rein kosmetisch und darf die Extraktion nie abbrechen.
    }
  };

  console.log('[KI-Shield Proxy] Safari-Background-Page aktiv (ohne Offscreen).');
})();
