// Adstop — косметическая фильтрация.
// Generic-слой (EasyList) приходит отдельным CSS-файлом, который background
// регистрирует через chrome.scripting. Здесь — доменные правила: content script
// спрашивает у background селекторы для текущего хоста и прячет их.
(() => {
  const STYLE_ID = "adstop-cosmetic-style";
  let appliedSelectors = [];

  function injectStyle(selectors) {
    if (!selectors.length || document.getElementById(STYLE_ID)) return;
    const style = document.createElement("style");
    style.id = STYLE_ID;
    style.textContent = `${selectors.join(",\n")} { display: none !important; }`;
    (document.head || document.documentElement).appendChild(style);
  }

  function countHidden(selectors) {
    let count = 0;
    // считаем кусками: один сломанный селектор не должен обнулить статистику
    for (let i = 0; i < selectors.length; i += 50) {
      const chunk = selectors.slice(i, i + 50).join(",");
      try {
        count += document.querySelectorAll(chunk).length;
      } catch {
        // нестандартный селектор — пропускаем кусок
      }
    }
    return count;
  }

  const host = location.hostname.replace(/^www\./, "");
  chrome.runtime.sendMessage({ type: "getCosmetic", host }, (response) => {
    if (chrome.runtime.lastError || !response?.active) return;
    appliedSelectors = response.selectors ?? [];
    if (document.documentElement) {
      injectStyle(appliedSelectors);
    } else {
      document.addEventListener("DOMContentLoaded", () => injectStyle(appliedSelectors));
    }
  });

  chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
    if (message?.type === "getCosmeticStats") {
      sendResponse({
        hidden: appliedSelectors.length ? countHidden(appliedSelectors) : 0,
        active: Boolean(document.getElementById(STYLE_ID)),
      });
    }
    return true;
  });
})();
