#!/usr/bin/env python3
"""DAS Bengkel — potret kondisi SEO dari GSC (data nyata):
tren mingguan 12 pekan, perbandingan 28 hari vs sebelum jatuh, sebaran posisi, kueri yang hilang.
"""
import json, os
from datetime import date, timedelta

from google.oauth2 import service_account
from googleapiclient.discovery import build

SITE = "https://dasindonesia.com/"
creds = service_account.Credentials.from_service_account_file(
    os.path.expanduser("~/.hermes/gsc_service_account.json"),
    scopes=["https://www.googleapis.com/auth/webmasters.readonly"])
gsc = build("webmasters", "v3", credentials=creds, cache_discovery=False)
AKHIR = date.today() - timedelta(days=2)


def q(a, b, dims=None, limit=5000):
    body = {"startDate": a.isoformat(), "endDate": b.isoformat(), "rowLimit": limit}
    if dims:
        body["dimensions"] = dims
    return gsc.searchanalytics().query(siteUrl=SITE, body=body).execute().get("rows", [])


def total(a, b):
    r = q(a, b)
    if not r:
        return 0, 0, 0.0
    x = r[0]
    return int(x["clicks"]), int(x["impressions"]), round(x["position"], 1)


print(f"=== DAS bengkel — kondisi {AKHIR} ===")
print("\n1. TREN MINGGUAN (12 pekan, Senin-Minggu)")
for i in range(11, -1, -1):
    akhir = AKHIR - timedelta(days=7 * i)
    awal = akhir - timedelta(days=6)
    k, t, p = total(awal, akhir)
    bar = "█" * min(60, int(t / 60))
    print(f"   {awal} s/d {akhir} | klik {k:>4} | tayang {t:>6} | pos {p:>5} | {bar}")

print("\n2. PERBANDINGAN PERIODE")
PERIODE = [("28 hari terakhir", AKHIR - timedelta(days=27), AKHIR),
           ("28 hari sebelumnya", AKHIR - timedelta(days=55), AKHIR - timedelta(days=28)),
           ("sebelum jatuh (Jul)", date(2026, 7, 1), date(2026, 7, 28)),
           ("puncak (Jun)", date(2026, 6, 1), date(2026, 6, 28))]
for label, a, b in PERIODE:
    k, t, p = total(a, b)
    ku = q(a, b, ["query"])
    ha = q(a, b, ["page"])
    print(f"   {label:<22} | klik {k:>5} | tayang {t:>7} | pos {p:>5} | kueri {len(ku):>4} | halaman {len(ha):>4}")

print("\n3. SEBARAN POSISI (28 hari terakhir)")
ku = q(AKHIR - timedelta(days=27), AKHIR, ["query"])
for lo, hi in ((1, 3), (4, 10), (11, 20), (21, 50), (51, 999)):
    n = [r for r in ku if lo <= r["position"] <= hi]
    print(f"   posisi {lo}-{hi if hi < 999 else '+'}: {len(n):>4} kueri | "
          f"klik {sum(int(r['clicks']) for r in n):>4} | tayang {sum(int(r['impressions']) for r in n):>6}")

print("\n4. 15 KUERI TERATAS SEKARANG (28 hari)")
for r in sorted(ku, key=lambda x: -x["impressions"])[:15]:
    print(f"   {r['impressions']:>5} tayang | {int(r['clicks']):>3} klik | pos {r['position']:>5.1f} | «{r['keys'][0]}»")

print("\n5. KUERI YANG HILANG (dulu ada impresi, sekarang tidak)")
dulu = {r["keys"][0]: r for r in q(date(2026, 7, 1), date(2026, 7, 28), ["query"])}
kini = {r["keys"][0] for r in ku}
hilang = sorted((v for k, v in dulu.items() if k not in kini), key=lambda x: -x["impressions"])
print(f"   kueri Juli: {len(dulu)} | masih muncul sekarang: {len(kini)} | hilang: {len(hilang)}")
for r in hilang[:12]:
    print(f"   - {r['impressions']:>5} tayang (pos {r['position']:.1f}) «{r['keys'][0]}»")
