// Adstop — YouTube: страховочный слой. Если рекламный ролик всё же дошёл до
// плеера (новый формат, который prune не поймал), доматываем его до конца и
// жмём «Пропустить». Работает в isolated world: имеет доступ к chrome.storage,
// уважает белый список и состояние подписки, и транслирует его prune-слою.
(() => {
  const SKIP_SELECTORS = [
    ".ytp-skip-ad-button",
    ".ytp-ad-skip-button",
    ".ytp-ad-skip-button-modern",
    ".ytp-ad-overlay-close-button",
  ];
  let active = false;
  let skippedCount = 0;

  function broadcastState() {
    window.dispatchEvent(new CustomEvent("adstop-yt-state", { detail: active }));
  }

  function refreshState() {
    chrome.storage.local.get(["blockingActive", "allowlist"], (data) => {
      const host = location.hostname.replace(/^www\./, "");
      const allowlisted = Array.isArray(data.allowlist) && data.allowlist.includes(host);
      active = data.blockingActive !== false && !allowlisted;
      broadcastState();
    });
  }

  refreshState();
  chrome.storage.onChanged.addListener((changes, area) => {
    if (area === "local" && (changes.blockingActive || changes.allowlist)) refreshState();
  });

  function tick() {
    if (!active) return;
    const player = document.querySelector(".html5-video-player");
    if (!player) return;
    const adShowing =
      player.classList.contains("ad-showing") || player.classList.contains("ad-interrupting");
    if (!adShowing) return;

    const video = player.querySelector("video");
    if (video && Number.isFinite(video.duration) && video.duration > 0 && video.currentTime < video.duration - 0.2) {
      video.muted = true;
      video.currentTime = video.duration; // доматываем рекламу до конца
      skippedCount += 1;
    }
    for (const selector of SKIP_SELECTORS) {
      const button = document.querySelector(selector);
      if (button) button.click();
    }
  }

  const interval = setInterval(tick, 300);
  window.addEventListener("pagehide", () => clearInterval(interval), { once: true });

  chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
    if (message?.type === "getYoutubeStats") {
      sendResponse({ active, skipped: skippedCount });
    }
    return true;
  });
})();
