
const domain = "btail.kredtech.com";
const conversions = [{"campaign":"DEFAULT","min_revenue":0.1,"pixel":"AW-DEFAULT/DEFAULT"}];
const API_ENDPOINT = "https://conversions.atemzz.com/conv";

function waitForClass(className) {
  return new Promise((resolve) => {
    const check = setInterval(() => {
      if (typeof window[className] !== 'undefined') {
        clearInterval(check);
        resolve(window[className]);
      }
    }, 100);
  });
}

function getQueryParam(name) {
  try {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get(name);
  } catch (e) {
    return null;
  }
}

function getGclid() {
  const gclid = getQueryParam('gclid');
  if (gclid) {
    try { sessionStorage.setItem('gclid', gclid); } catch (e) {}
  }
  try {
    return gclid || sessionStorage.getItem('gclid') || null;
  } catch (e) {
    return gclid || null;
  }
}

function getUtmCampaign() {
  // keep the last seen utm_campaign in session, same style as gclid
  const utm = getQueryParam('utm_campaign');
  if (utm) {
    try { sessionStorage.setItem('utm_campaign', utm); } catch (e) {}
  }
  try {
    return utm || sessionStorage.getItem('utm_campaign') || null;
  } catch (e) {
    return utm || null;
  }
}

// ✅ Sends conversion to your API (POST)
async function send_conversion(payload) {
  try {
    const res = await fetch(API_ENDPOINT, {
      method: "POST",
      headers: {
        "content-type": "application/json",
      },
      body: JSON.stringify(payload),
      // keepalive helps on page unload in some browsers
      keepalive: true,
    });

    // Optional: log response status
    console.log("[GADS] API POST status:", res.status);
    return res.ok;
  } catch (e) {
    console.log("[GADS] API POST error:", e);
    return false;
  }
}

// Fires each conversion once per transaction_id (and campaign)
async function fireConversionsOnce({ bTail, idTransacao, gclid, utmCampaign }) {
  if (!Array.isArray(conversions)) return;

  for (const cfg of conversions) {
    if (!cfg) continue;

    const minRev = Number(cfg.min_revenue ?? 0);
    const pixel = String(cfg.pixel || "");
    const requiredCampaign = String(cfg.campaign || "");

    if (!utmCampaign || utmCampaign !== requiredCampaign) continue;

    if (bTail <= minRev) continue;

    // once per (pixel + tx + campaign)
    const key = "gadsFired:" + (pixel || "no-pixel") + ":" + String(idTransacao || "no-tx") + ":" + requiredCampaign;
    try {
      if (sessionStorage.getItem(key) === "1") continue;
    } catch (e) {}

    const payload = {
      domain,
      utm_campaign: utmCampaign,
      required_campaign: requiredCampaign,
      gclid: gclid || null,
      bTail: bTail,
      min_revenue: minRev,
      pixel: pixel || null,
      transaction_id: idTransacao || null,
      ts: Date.now(),
      href: (typeof location !== "undefined" ? location.href : null),
      path: (typeof location !== "undefined" ? location.pathname : null),
    };

    const ok = await send_conversion(payload);

    if (ok) {
      try { sessionStorage.setItem(key, "1"); } catch (e) {}
      console.log("[GADS] Conversion sent (matched utm_campaign)", payload);
    } else {
      console.log("[GADS] Conversion NOT sent (API failed)", payload);
    }
  }
}

waitForClass('av').then(() => {
  const gclid = getGclid();
  const utmCampaign = getUtmCampaign();

  let bTail = parseFloat(sessionStorage.getItem('bTail')) || 0;

  console.log("v2.02");
  console.log("Valor inicial de bTail:", bTail);
  console.log("Domain (config):", domain);
  console.log("Domain (window):", window.location.hostname);
  console.log("gclid:", gclid);
  console.log("utm_campaign:", utmCampaign);
  console.log("conversions:", conversions);

  if (typeof googletag === "undefined" || !googletag.cmd) {
    console.log("[GADS] googletag not found");
    return;
  }

  googletag.cmd.push(() => {
    const pubads = googletag.pubads && googletag.pubads();
    if (!pubads) return;

    pubads.addEventListener('impressionViewable', async (event) => {
      const slot = event.slot;

      let price_rule = null;
      try { price_rule = slot.getTargeting('price_rule')[0]; } catch (e) {}

      const price_floor = parseFloat(price_rule || 0);

      bTail = bTail + (price_floor / 1000);
      try { sessionStorage.setItem('bTail', bTail); } catch (e) {}

      console.log("Nova impressão viewable:", price_floor);
      console.log("bTail atualizado:", bTail);

      await fireConversionsOnce({ bTail, gclid, utmCampaign });
    });
  });
});
