#!/usr/bin/env python3
"""TSLaw: pantau posisi kata kunci target di GSC, simpan riwayat, cetak laporan perubahan.
Dijalankan mingguan oleh cron. Aman diulang: membandingkan dengan snapshot terakhir."""
import json, os, sys, urllib.parse, urllib.request, urllib.error
from datetime import date, timedelta

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
TOKEN = f"{WS}/seo-oauth/google_token_atun.json"
SITE_ENC = urllib.parse.quote("https://www.tslaw.id/", safe="")
RIWAYAT = f"{WS}/drafts/tslaw_peringkat_history.json"

KATA = [
    "law firm surabaya", "konsultan hukum surabaya", "firma hukum surabaya", "pengacara surabaya",
    "advokat surabaya", "jasa hukum surabaya", "law firm terbaik di surabaya", "kantor pengacara surabaya",
    "jasa pembuatan surat wasiat", "surat wasiat", "cara daftar merek dagang", "pendaftaran merek",
    "cara mengurus sengketa tanah", "pengacara gugat cerai surabaya", "biaya jasa law firm surabaya",
    "legalitas perusahaan surabaya", "cara lapor polisi penipuan online", "perjanjian sewa menyewa",
]

try:
    from google.oauth2.credentials import Credentials
    from google.auth.transport.requests import Request
    c = Credentials.from_authorized_user_file(TOKEN)
    if c.expired and c.refresh_token:
        c.refresh(Request()); open(TOKEN, "w").write(c.to_json())
except Exception as e:
    print("❌ Token Google tidak bisa dipakai:", str(e)[:150])
    print("   Perlu otorisasi ulang (lihat seo-oauth/oauth_seo.py --auth-url).")
    sys.exit(0)

H = {"Authorization": f"Bearer {c.token}", "Content-Type": "application/json"}
akhir = date.today() - timedelta(days=3)


def data(mulai, selesai):
    isi = {"startDate": mulai, "endDate": selesai, "dimensions": ["query"], "rowLimit": 500}
    r = urllib.request.Request(f"https://www.googleapis.com/webmasters/v3/sites/{SITE_ENC}/searchAnalytics/query",
                               data=json.dumps(isi).encode(), headers=H)
    try:
        with urllib.request.urlopen(r, timeout=150) as x:
            return json.loads(x.read()).get("rows", [])
    except Exception as e:
        print("❌ Gagal membaca GSC:", str(e)[:150])
        sys.exit(0)


peta90 = {r["keys"][0].lower(): {"pos": round(r["position"], 1), "tayang": r["impressions"], "klik": r["clicks"]}
          for r in data((akhir - timedelta(days=89)).isoformat(), akhir.isoformat())}
peta28 = {r["keys"][0].lower(): {"pos": round(r["position"], 1), "tayang": r["impressions"], "klik": r["clicks"]}
          for r in data((akhir - timedelta(days=27)).isoformat(), akhir.isoformat())}

lama = {}
if os.path.exists(RIWAYAT):
    try:
        lama = json.load(open(RIWAYAT))
    except Exception:
        lama = {}

baris = []
for k in KATA:
    kk = k.lower()
    d28 = peta28.get(kk)
    d90 = peta90.get(kk)
    now = {"pos": (d28 or d90 or {}).get("pos"), "tayang": (d28 or {}).get("tayang", 0),
           "klik": (d28 or {}).get("klik", 0), "pos_90": (d90 or {}).get("pos")}
    sebelum = lama.get(kk, {})
    delta = None
    if now["pos"] is not None and sebelum.get("pos") is not None:
        delta = round(sebelum["pos"] - now["pos"], 1)      # positif = naik
    baris.append((k, now, delta, sebelum))

print("📊 PANTAU PERINGKAT TSLaw (tslaw.id)")
print(f"Periode data: {28} hari terakhir (sampai {(akhir).isoformat()})")
print()
naik, turun, baru, kosong = [], [], [], []
for k, now, delta, sebelum in baris:
    if now["pos"] is None:
        kosong.append(k)
        continue
    tanda = ""
    if delta is None:
        baru.append(k); tanda = " (baru terpantau)"
    elif delta > 0.5:
        naik.append(k); tanda = f" (naik {delta})"
    elif delta < -0.5:
        turun.append(k); tanda = f" (turun {abs(delta)})"
    print(f'   "{k}" → posisi {now["pos"]} | {now["tayang"]} tayang | {now["klik"]} klik{tanda}')

print()
if naik:
    print(f"✅ Naik: {', '.join(naik)}")
if turun:
    print(f"⚠️ Turun: {', '.join(turun)}")
if baru:
    print(f"🆕 Baru terpantau: {', '.join(baru)}")
if kosong:
    print(f"➖ Belum muncul di pencarian: {', '.join(kosong)}")
print()
print("Catatan: posisi menurun belum tentu buruk bila tayangan naik — periksa pasangannya.")

json.dump({k.lower(): now for k, now, _, _ in baris}, open(RIWAYAT, "w"), indent=1, ensure_ascii=False)
print(f"(riwayat tersimpan: {RIWAYAT})")
