#!/usr/bin/env python3
"""DAS: bedah event 'click' bawaan GA4 — apakah menyimpan alamat tautan (linkUrl) dan jenisnya."""
import json, urllib.request, urllib.error

TOKEN = "/home/mantapman/.hermes/profiles/suwarno/workspace/seo-oauth/google_token_seo.json"
GA4 = "properties/443064659"
from google.oauth2.credentials import Credentials
from google.auth.transport.requests import Request
c = Credentials.from_authorized_user_file(TOKEN, ["https://www.googleapis.com/auth/analytics.readonly"])
if not c.valid:
    c.refresh(Request()); open(TOKEN, "w").write(c.to_json())
H = {"Authorization": f"Bearer {c.token}", "Content-Type": "application/json"}


def lapor(isi):
    r = urllib.request.Request(f"https://analyticsdata.googleapis.com/v1beta/{GA4}:runReport",
                               data=json.dumps(isi).encode(), headers=H)
    try:
        with urllib.request.urlopen(r, timeout=150) as x:
            return json.loads(x.read())
    except urllib.error.HTTPError as e:
        return {"err": e.code, "pesan": e.read().decode()[:250]}
    except Exception as e:
        return {"err": str(e)[:150]}


print("=== event 'click': alamat tautan yang diklik (90 hari) ===")
d = lapor({"dateRanges": [{"startDate": "90daysAgo", "endDate": "today"}],
           "dimensions": [{"name": "eventName"}, {"name": "linkUrl"}],
           "metrics": [{"name": "eventCount"}], "limit": 100,
           "dimensionFilter": {"filter": {"fieldName": "eventName", "stringFilter": {"value": "click"}}}})
if "err" in d:
    print("   gagal:", d)
else:
    rows = d.get("rows", [])
    print(f"   {len(rows)} baris")
    for r in rows[:25]:
        print(f"   {r['metricValues'][0]['value']:>4}x  {r['dimensionValues'][1]['value'][:110]}")

print("\n=== apakah parameter 'outbound' tersedia? ===")
d = lapor({"dateRanges": [{"startDate": "90daysAgo", "endDate": "today"}],
           "dimensions": [{"name": "eventName"}, {"name": "outbound"}],
           "metrics": [{"name": "eventCount"}], "limit": 50,
           "dimensionFilter": {"filter": {"fieldName": "eventName", "stringFilter": {"value": "click"}}}})
print("   ", json.dumps(d)[:400] if "err" not in d else d)

print("\n=== parameter 'linkDomain' untuk event click ===")
d = lapor({"dateRanges": [{"startDate": "90daysAgo", "endDate": "today"}],
           "dimensions": [{"name": "linkDomain"}],
           "metrics": [{"name": "eventCount"}], "limit": 30,
           "dimensionFilter": {"filter": {"fieldName": "eventName", "stringFilter": {"value": "click"}}}})
if "err" not in d:
    for r in d.get("rows", []):
        print(f"   {r['metricValues'][0]['value']:>4}x  {r['dimensionValues'][0]['value']}")
else:
    print("   ", d)
