#!/usr/bin/env python3
"""GA4 StudioSoft: halaman pendaratan yang menghasilkan konversi (90 hari) + kanal."""
import os
from google.oauth2 import service_account
from googleapiclient.discovery import build

KEY = os.path.expanduser("~/.hermes/gsc_service_account.json")
PROP = "properties/478760195"
ga = build("analyticsdata", "v1beta",
           credentials=service_account.Credentials.from_service_account_file(
               KEY, scopes=["https://www.googleapis.com/auth/analytics.readonly"]),
           cache_discovery=False)

req = {"dateRanges": [{"startDate": "2026-06-25", "endDate": "2026-09-23"}],
       "dimensions": [{"name": "landingPagePlusQueryString"}, {"name": "sessionDefaultChannelGroup"}],
       "metrics": [{"name": "sessions"}, {"name": "keyEvents"}, {"name": "userEngagementDuration"}],
       "limit": 50,
       "orderBys": [{"metric": {"metricName": "keyEvents"}, "desc": True}]}
res = ga.properties().runReport(property=PROP, body=req).execute()
print(f"{'kejadian':>8} {'sesi':>5} {'detik':>6}  kanal / halaman pendaratan")
for row in res.get("rows", []):
    lp, ch = row["dimensionValues"][0]["value"], row["dimensionValues"][1]["value"]
    ses = int(row["metricValues"][0]["value"]); ke = int(row["metricValues"][1]["value"])
    dur = round(float(row["metricValues"][2]["value"]) / max(ses, 1))
    print(f"{ke:>8} {ses:>5} {dur:>6}  {ch:<16} {lp[:56]}")

print("\n=== total kejadian konversi per kanal (90 hari) ===")
req2 = {"dateRanges": [{"startDate": "2026-06-25", "endDate": "2026-09-23"}],
        "dimensions": [{"name": "sessionDefaultChannelGroup"}],
        "metrics": [{"name": "sessions"}, {"name": "keyEvents"}, {"name": "totalUsers"}],
        "limit": 20}
for row in ga.properties().runReport(property=PROP, body=req2).execute().get("rows", []):
    ch = row["dimensionValues"][0]["value"]
    print(f"  {ch:<20} sesi {row['metricValues'][0]['value']:>5} | kejadian {row['metricValues'][1]['value']:>4} | pengguna {row['metricValues'][2]['value']}")

print("\n=== kejadian berdasarkan nama (90 hari) ===")
req3 = {"dateRanges": [{"startDate": "2026-06-25", "endDate": "2026-09-23"}],
        "dimensions": [{"name": "eventName"}],
        "metrics": [{"name": "eventCount"}], "limit": 25,
        "orderBys": [{"metric": {"metricName": "eventCount"}, "desc": True}]}
for row in ga.properties().runReport(property=PROP, body=req3).execute().get("rows", []):
    print(f"  {row['dimensionValues'][0]['value']:<28} {row['metricValues'][0]['value']}")
