#!/usr/bin/env python3
"""Cek GA4 + GSC untuk LEIT Surabaya: properti, tag, ringkasan, query, halaman, channel."""
import json, os, sys
from datetime import date, timedelta
from google.oauth2 import service_account
from googleapiclient.discovery import build

SA = os.path.expanduser("~/.hermes/gsc_service_account.json")
creds = service_account.Credentials.from_service_account_file(
    SA, scopes=["https://www.googleapis.com/auth/webmasters.readonly",
                "https://www.googleapis.com/auth/analytics.readonly"])
gsc = build("webmasters", "v3", credentials=creds, cache_discovery=False)

print("=== GSC: daftar properti yang bisa diakses SA ===")
sites = gsc.sites().list().execute().get("siteEntry", [])
for s in sites:
    print("  ", s["siteUrl"], "|", s.get("permissionLevel"))

leit = [s["siteUrl"] for s in sites if "leit" in s["siteUrl"].lower() or "leitsurabaya" in s["siteUrl"].lower()]
print("\nproperti LEIT:", leit)
if not leit:
    print("!! SA belum ditambahkan sebagai user di properti LEIT")
    sys.exit(0)
site = leit[0]

today = date.today()
end = today - timedelta(days=2)   # data GSC lag ~2 hari
start28 = (end - timedelta(days=27)).isoformat()
end = end.isoformat()
start90 = (date.fromisoformat(end) - timedelta(days=89)).isoformat()


def q(body):
    return gsc.searchanalytics().query(siteUrl=site, body=body).execute().get("rows", [])


def ringkas(d1, d2, label):
    rows = q({"startDate": d1, "endDate": d2, "dimensions": [], "rowLimit": 1})
    if not rows:
        print(f"{label}: TIDAK ADA DATA"); return
    r = rows[0]
    print(f"{label}: klik {int(r['clicks'])} | impresi {int(r['impressions'])} | CTR {r['ctr']*100:.2f}% | posisi {r['position']:.1f}")


print(f"\n=== GSC ringkasan ({site}) ===")
print("periode 28 hari:", start28, "→", end)
ringkas(start28, end, "  28d")
ringkas(start90, end, "  90d")

print("\n=== top 20 query (28 hari) ===")
for r in q({"startDate": start28, "endDate": end, "dimensions": ["query"], "rowLimit": 20}):
    print(f"  {int(r['impressions']):>6} imp | {int(r['clicks']):>4} klik | CTR {r['ctr']*100:>5.1f}% | pos {r['position']:>5.1f} | {r['keys'][0]}")

print("\n=== top 15 halaman (28 hari) ===")
for r in q({"startDate": start28, "endDate": end, "dimensions": ["page"], "rowLimit": 15}):
    print(f"  {int(r['impressions']):>6} imp | {int(r['clicks']):>4} klik | CTR {r['ctr']*100:>5.1f}% | pos {r['position']:>5.1f} | {r['keys'][0].replace('https://www.leitsurabaya.com','')}")

print("\n=== peluang CTR: klik 0, impresi >=3, posisi 4-15 (28 hari) ===")
rows = q({"startDate": start28, "endDate": end, "dimensions": ["query", "page"], "rowLimit": 500})
pel = [r for r in rows if int(r["clicks"]) == 0 and int(r["impressions"]) >= 3 and 4 <= r["position"] <= 15]
pel.sort(key=lambda r: -r["impressions"])
for r in pel[:20]:
    print(f"  {int(r['impressions']):>5} imp | pos {r['position']:>5.1f} | {r['keys'][0][:45]:<46} | {r['keys'][1].replace('https://www.leitsurabaya.com','')[:45]}")
print("total peluang:", len(pel))
