#!/usr/bin/env python3
"""Probe headless: apakah pelacakan konversi menyala di studiosoft.id?
- cek window.__ssTrackingPasang
- klik tombol WhatsApp -> tangkap beacon collect ke Google Analytics
"""
import asyncio, json, subprocess, sys, time, urllib.request, websockets

CHROME = "/home/mantapman/.cache/ms-playwright/chromium-1234/chrome-linux64/chrome"
PORT = int(sys.argv[2]) if len(sys.argv) > 2 else 9471
TARGET = sys.argv[1] if len(sys.argv) > 1 else "https://studiosoft.id/"
hits = []


def buka_tab():
    req = urllib.request.Request(f"http://127.0.0.1:{PORT}/json/new?about:blank", method="PUT")
    for _ in range(15):
        try:
            return json.load(urllib.request.urlopen(req, timeout=3))
        except Exception:
            time.sleep(0.5)
    raise RuntimeError("tab gagal dibuat")


async def main():
    tab = buka_tab()
    async with websockets.connect(tab["webSocketDebuggerUrl"], max_size=2**24) as ws:
        pending, mid = {}, 0

        async def reader():
            async for raw in ws:
                msg = json.loads(raw)
                if "id" in msg and msg["id"] in pending:
                    pending[msg["id"]].set_result(msg)
                elif msg.get("method") == "Network.requestWillBeSent":
                    u = msg["params"]["request"]["url"]
                    if "collect" in u or "google-analytics" in u or "analytics.google" in u:
                        hits.append(u)

        rtask = asyncio.create_task(reader())

        async def cmd(method, params=None):
            nonlocal mid
            mid += 1
            fut = asyncio.get_event_loop().create_future()
            pending[mid] = fut
            await ws.send(json.dumps({"id": mid, "method": method, "params": params or {}}))
            return await asyncio.wait_for(fut, 30)

        await cmd("Page.enable"); await cmd("Network.enable"); await cmd("Runtime.enable")
        await cmd("Page.navigate", {"url": TARGET})
        await asyncio.sleep(10)

        cek = await cmd("Runtime.evaluate", {"expression": """JSON.stringify({
            marker: !!window.__ssTrackingPasang,
            gtag: typeof window.gtag,
            dl: (window.dataLayer||[]).length,
            waLinks: document.querySelectorAll('a[href*="wa.me"], a[href*="whatsapp"]').length,
            chaty: document.querySelectorAll('[class*="chaty"],[id*="chaty"]').length,
            forms: document.querySelectorAll('form').length
        })""", "returnByValue": True})
        print("DOM:", cek.get("result", {}).get("result", {}).get("value"))

        # klik tombol WhatsApp lewat JS (listener tetap jalan)
        klik = await cmd("Runtime.evaluate", {"expression": """
            (function(){
              var a = document.querySelector('a[href*="wa.me"], a[href*="whatsapp"]');
              if (!a) return 'tidak ada link WA';
              a.dispatchEvent(new MouseEvent('click', {bubbles:true, cancelable:true, view:window}));
              return 'diklik: ' + (a.getAttribute('href')||'').slice(0,60);
            })()""", "returnByValue": True})
        print("klik WA:", klik.get("result", {}).get("result", {}).get("value"))
        await asyncio.sleep(6)
        rtask.cancel()


try:
    asyncio.run(main())
except Exception as e:
    print("ERR", type(e).__name__, str(e)[:200])

print(f"\nBEACON TERKIRIM: {len(hits)}")
for h in hits[:6]:
    nama = ""
    if "en=" in h:
        nama = h.split("en=")[1].split("&")[0]
    tid = ""
    if "tid=" in h:
        tid = h.split("tid=")[1].split("&")[0]
    print(f"  tid={tid} event={nama or '(page_view)'}")
    print(f"    {h[:150]}")
