// Контент-скрипт: заменяет встроенные в страницу PDF (<embed>/<object>/<iframe>)
// на наш просмотрщик. Работает на обычных веб-страницах (не на chrome-extension://).

(() => {
  const VIEWER = chrome.runtime.getURL("src/viewer/viewer.html");

  function pdfUrlOf(el) {
    const raw = el.getAttribute("src") || el.getAttribute("data");
    if (!raw) return null;
    let abs;
    try {
      abs = new URL(raw, location.href).href;
    } catch {
      return null;
    }
    const type = (el.getAttribute("type") || "").toLowerCase();
    const isPdf = /\.pdf(\?|#|$)/i.test(abs) || type.includes("application/pdf");
    // не трогаем уже наш просмотрщик и data/blob
    if (!isPdf || abs.startsWith(VIEWER) || abs.startsWith("chrome-extension:")) return null;
    return abs;
  }

  function replace(el) {
    if (el.dataset.arisReplaced) return;
    const url = pdfUrlOf(el);
    if (!url) return;
    el.dataset.arisReplaced = "1";
    const frame = document.createElement("iframe");
    frame.src = `${VIEWER}?file=${url}`;
    frame.setAttribute("allow", "fullscreen");
    const w = el.getAttribute("width") || (el.offsetWidth ? el.offsetWidth + "px" : "100%");
    const h = el.getAttribute("height") || (el.offsetHeight ? el.offsetHeight + "px" : "600px");
    frame.style.cssText = `width:${typeof w === "number" ? w + "px" : w};height:${typeof h === "number" ? h + "px" : h};border:0;`;
    el.replaceWith(frame);
  }

  function scan(root = document) {
    root
      .querySelectorAll("embed[type='application/pdf'], object[type='application/pdf'], embed[src], object[data], iframe[src]")
      .forEach(replace);
  }

  async function init() {
    // Уважаем настройку перехвата.
    try {
      const { interceptEnabled } = await chrome.storage.local.get("interceptEnabled");
      if (interceptEnabled === false) return;
    } catch {
      /* нет доступа — продолжаем */
    }
    scan();
    // Динамически добавленные встраивания.
    const obs = new MutationObserver((muts) => {
      for (const m of muts) {
        for (const n of m.addedNodes) {
          if (n.nodeType !== 1) continue;
          if (n.matches?.("embed,object,iframe")) replace(n);
          else n.querySelectorAll && scan(n);
        }
      }
    });
    obs.observe(document.documentElement, { childList: true, subtree: true });
  }

  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", init);
  } else {
    init();
  }
})();
