chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.action === "get-session-token") {
    const url = request.url;
    if (!chrome.cookies) {
      sendResponse({ error: "Cookies API non disponibile nelle autorizzazioni." });
      return;
    }
    chrome.cookies.get({ url: url, name: "posta_session" }, (cookie) => {
      if (chrome.runtime.lastError) {
        console.error("Errore recupero cookie:", chrome.runtime.lastError);
        sendResponse({ error: chrome.runtime.lastError.message });
      } else {
        sendResponse({ token: cookie ? cookie.value : null });
      }
    });
    return true; // Keep message channel open for async response
  }

  if (request.action === "forward-inpost-scan") {
    // Cerca la scheda che contiene il portale InPost PLA
    chrome.tabs.query({}, (tabs) => {
      const inpostTab = tabs.find(tab => tab.url && tab.url.includes("pla.inpost.it"));
      if (!inpostTab) {
        // Se non esiste la scheda, la apriamo in background ed eseguiamo l'operazione
        chrome.tabs.create({ url: "https://pla.inpost.it/", active: false }, (newTab) => {
          const listener = (tabId, changeInfo) => {
            if (tabId === newTab.id && changeInfo.status === 'complete') {
              // Delay di 5 secondi per consentire l'autologin ed il caricamento iniziale
              setTimeout(() => {
                chrome.tabs.sendMessage(newTab.id, {
                  action: "process-inpost-scan",
                  barcode: request.barcode,
                  pin: request.pin || null,
                  opType: request.opType,
                  scanId: request.scanId,
                  senderTabId: sender.tab.id
                });
              }, 5000);
              chrome.tabs.onUpdated.removeListener(listener);
            }
          };
          chrome.tabs.onUpdated.addListener(listener);
        });
        return;
      }
      
      // Se il tab c'è già, invia l'azione di autocompilazione
      chrome.tabs.sendMessage(inpostTab.id, {
        action: "process-inpost-scan",
        barcode: request.barcode,
        pin: request.pin || null,
        opType: request.opType,
        scanId: request.scanId,
        senderTabId: sender.tab.id
      });
    });
    return true;
  }
  
  // Inoltra lo stato di completamento/errore alla pagina dell'app
  if (request.action === "report-inpost-status") {
    chrome.tabs.sendMessage(request.senderTabId, {
      action: "inpost-status-update",
      scanId: request.scanId,
      status: request.status,
      error: request.error || null
    });
    return true;
  }

  // Inoltra il pagamento a DropPoint portando il tab in focus
  if (request.action === "forward-droppoint-payment") {
    chrome.tabs.query({}, (tabs) => {
      const dropPointTab = tabs.find(tab => tab.url && (tab.url.includes("droppoint") || tab.url.includes("drop-point") || tab.url.includes("postalpay")));
      if (!dropPointTab) {
        chrome.tabs.sendMessage(sender.tab.id, {
          action: "droppoint-error",
          error: "Piattaforma DropPoint non aperta nel browser! Apri il portale DropPoint ed effettua l'accesso."
        });
        return;
      }
      
      // Porta il tab in evidenza
      chrome.tabs.update(dropPointTab.id, { active: true });
      
      // Invia compilazione automatica
      chrome.tabs.sendMessage(dropPointTab.id, {
        action: "autofill-payment",
        payload: request.payload
      });
    });
    return true;
  }
});
