/**
 * CearIA V.1 (by Ceara) — Service Worker
 *
 * Relay de mensagens entre content script e sidepanel (mailbox pattern).
 * Nao faz processamento pesado — apenas roteamento e sidepanel.open().
 */

// ── Abrir sidepanel ao clicar no icone ──────────────────────────────────

chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true }).catch(() => {});

// ── Listener de mensagens ───────────────────────────────────────────────

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  // Content script -> sidepanel: request de geracao
  if (message.type === "LIGHT_GENERATE") {
    (async () => {
      try {
        // 1) Gravar PRIMEIRO para evitar race com init() do sidepanel
        await chrome.storage.local.set({
          light_generate_request: {
            demandaId: message.demandaId,
            numeroPasta: message.numeroPasta,
            processoId: message.processoId,
            manifestacaoTipo: message.manifestacaoTipo,
            attusToken: message.attusToken || "",
            timestamp: Date.now(),
          },
        });

        // 2) Abrir sidepanel na tab que enviou (depois do set)
        if (sender.tab?.id) {
          try {
            await chrome.sidePanel.open({ tabId: sender.tab.id });
          } catch (e) {
            console.warn("[CearIA SW] sidePanel.open falhou:", e && e.message);
          }
        }

        sendResponse({ ok: true });
      } catch (e) {
        console.error("[CearIA SW] LIGHT_GENERATE erro:", e);
        sendResponse({ ok: false, error: String(e && e.message || e) });
      }
    })();
    return true; // mantem canal async para sendResponse
  }

  // Content script -> sidepanel: contexto atual da aba
  if (message.type === "LIGHT_CONTEXT_UPDATE") {
    chrome.storage.local.set({
      light_current_context: {
        demandaId: message.demandaId,
        numeroPasta: message.numeroPasta,
        processoId: message.processoId,
        attusToken: message.attusToken || "",
        url: message.url || "",
        timestamp: Date.now(),
      },
    });
    sendResponse({ ok: true });
    return true;
  }

  // Sidepanel solicita token atualizado do content script
  if (message.type === "LIGHT_REQUEST_TOKEN") {
    // Encaminha para o content script da aba ativa
    chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
      if (tabs[0]?.id) {
        chrome.tabs.sendMessage(tabs[0].id, { type: "GET_ATTUS_TOKEN" }, (response) => {
          sendResponse(response || { token: "" });
        });
      } else {
        sendResponse({ token: "" });
      }
    });
    return true; // async sendResponse
  }
});

// ── Listener de instalacao/atualizacao ──────────────────────────────────

chrome.runtime.onInstalled.addListener((details) => {
  if (details.reason === "install") {
    console.log("[CearIA] Extensao instalada.");
  } else if (details.reason === "update") {
    console.log(`[CearIA] Atualizada para v${chrome.runtime.getManifest().version}`);
  }
});

// ── Tab-aware context (Task 3) ──────────────────────────────────────────
//
// Rastreia a "aba Attus ativa" (aquela que fez o ultimo LIGHT_CONTEXT_UPDATE).
// Quando essa aba e fechada ou navega para fora de pasta-digital, limpamos
// light_current_context para o sidepanel resetar.

let lastAttusTabId = null;

chrome.runtime.onMessage.addListener((message, sender, _sendResponse) => {
  if (message && message.type === "LIGHT_CONTEXT_UPDATE" && sender && sender.tab && sender.tab.id) {
    lastAttusTabId = sender.tab.id;
  }
});

chrome.tabs.onRemoved.addListener(async (tabId) => {
  if (tabId !== lastAttusTabId) return;
  console.log(`[CearIA SW] Aba Attus ${tabId} fechada. Limpando contexto.`);
  lastAttusTabId = null;
  try {
    await chrome.storage.local.remove("light_current_context");
  } catch (e) {
    console.warn("[CearIA SW] Falha ao limpar contexto:", e);
  }
});

chrome.tabs.onUpdated.addListener(async (tabId, changeInfo) => {
  if (tabId !== lastAttusTabId) return;
  if (!changeInfo.url) return;
  const url = changeInfo.url;
  if (!url.includes("attus.pge.pe.gov.br/app/pasta-digital")) {
    // A aba sai do pasta-digital: resetar o contexto da pasta.
    console.log(`[CearIA SW] Aba Attus ${tabId} saiu de pasta-digital -> ${url}`);
    try {
      await chrome.storage.local.remove("light_current_context");
    } catch (e) {
      console.warn("[CearIA SW] Falha ao limpar contexto:", e);
    }
  }
});

chrome.tabs.onActivated.addListener(async (activeInfo) => {
  // Quando a aba ativa muda, verificar se ainda estamos numa pasta-digital.
  try {
    const tab = await chrome.tabs.get(activeInfo.tabId);
    if (tab && tab.url && tab.url.includes("attus.pge.pe.gov.br/app/pasta-digital")) {
      lastAttusTabId = tab.id;
      // O content script ira rebroadcast ao focar (light-injector.js window.focus listener)
    }
  } catch { /* ignore */ }
});
