/* global React */
/*
  Analytics scaffolding — placeholder IDs.
  Loads only AFTER cookie consent (am-cookie-consent.analytics === true).
  Tracked events:
    - calendly_book        (Calendly varaus)
    - form_submit          (Yhteydenotto)
    - saastolaskuri_complete (Säästölaskurin tulos)
    - lead_magnet_download (Oppaan lataus)
*/

(function () {
  // ⚑ TODO: replace placeholder IDs before launch
  const IDS = {
    GTM: "GTM-XXXXXXX",
    GA4: "G-XXXXXXXXXX",
    CLARITY: "xxxxxxxxxx",
    LINKEDIN: "0000000",
  };

  function getConsent() {
    try {
      const saved = JSON.parse(localStorage.getItem("am-cookie-consent") || "null");
      return saved || null;
    } catch (e) { return null; }
  }

  function isPlaceholder(id) {
    return !id || /X{2,}|x{4,}/.test(id);
  }

  function loadScript(src, attrs = {}) {
    if (document.querySelector(`script[data-am-src="${src}"]`)) return;
    const s = document.createElement("script");
    s.async = true;
    s.src = src;
    s.dataset.amSrc = src;
    Object.entries(attrs).forEach(([k, v]) => s.setAttribute(k, v));
    document.head.appendChild(s);
  }

  function loadAnalytics() {
    const c = getConsent();
    if (!c || !c.analytics) return;

    // Google Tag Manager
    if (!isPlaceholder(IDS.GTM)) {
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({ "gtm.start": Date.now(), event: "gtm.js" });
      loadScript(`https://www.googletagmanager.com/gtm.js?id=${IDS.GTM}`);
    }

    // Google Analytics 4 (loaded directly as a fallback / supplement to GTM)
    if (!isPlaceholder(IDS.GA4)) {
      loadScript(`https://www.googletagmanager.com/gtag/js?id=${IDS.GA4}`);
      window.gtag = window.gtag || function () { window.dataLayer.push(arguments); };
      window.gtag("js", new Date());
      window.gtag("config", IDS.GA4, { anonymize_ip: true, send_page_view: true });
    }

    // Microsoft Clarity
    if (!isPlaceholder(IDS.CLARITY)) {
      (function (c, l, a, r, i, t, y) {
        c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); };
        t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i; t.dataset.amSrc = "clarity";
        y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y);
      })(window, document, "clarity", "script", IDS.CLARITY);
    }

    // LinkedIn Insight Tag (only if marketing consent)
    if (c.marketing && !isPlaceholder(IDS.LINKEDIN)) {
      window._linkedin_partner_id = IDS.LINKEDIN;
      window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
      window._linkedin_data_partner_ids.push(IDS.LINKEDIN);
      loadScript("https://snap.licdn.com/li.lms-analytics/insight.min.js");
    }
  }

  // Public helper: track a custom event (pushes to dataLayer + GA4)
  window.amTrack = function (event, params = {}) {
    try {
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({ event, ...params });
      if (typeof window.gtag === "function") {
        window.gtag("event", event, params);
      }
    } catch (e) {}
  };

  // Initial load attempt + re-check after consent change
  loadAnalytics();
  window.addEventListener("storage", (e) => {
    if (e.key === "am-cookie-consent") loadAnalytics();
  });
  // Same-window consent change: cookie-banner posts this event
  window.addEventListener("am-consent-changed", loadAnalytics);
})();
