#!/usr/bin/env python3
"""TSLaw: data untuk strategi menembus 'law firm surabaya' — tren posisi, kueri sekitarnya, dan kekuatan on-page."""
import base64, json, re, urllib.parse, urllib.request, urllib.error, importlib.util
from datetime import date, timedelta
from collections import Counter

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
TOKEN = f"{WS}/seo-oauth/google_token_atun.json"
SITE = "https://www.tslaw.id/"
SITE_ENC = urllib.parse.quote(SITE, safe="")
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())
H = {"Authorization": f"Bearer {c.token}", "Content-Type": "application/json"}


def q(dim, a, b, baris=500, saring=None):
    isi = {"startDate": a, "endDate": b, "dimensions": dim, "rowLimit": baris}
    if saring:
        isi["dimensionFilterGroups"] = [{"filters": saring}]
    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 urllib.error.HTTPError as e:
        print("   HTTP", e.code, e.read().decode()[:100]); return []


akhir = date.today() - timedelta(days=3)
S = lambda x: x.isoformat()
HEAD = ["law firm surabaya", "firma hukum surabaya", "law firm di surabaya", "konsultan hukum surabaya",
        "pengacara surabaya", "advokat surabaya", "jasa hukum surabaya", "law firm terbaik di surabaya"]

print("=== tren bulanan untuk kueri kepala (16 bulan) ===")
rows = q(["query", "date"], "2025-05-15", S(akhir), 5000)
for kw in HEAD:
    seri = [(r["keys"][1], r["impressions"], round(r["position"], 1)) for r in rows if r["keys"][0] == kw]
    if not seri:
        print(f"\n   «{kw}» — tidak ada tayangan sama sekali")
        continue
    seri.sort()
    bulan = {}
    for tgl, tayang, pos in seri:
        b = tgl[:7]
        d = bulan.setdefault(b, [0, []])
        d[0] += tayang; d[1].append(pos)
    print(f"\n   «{kw}» — total {sum(x[1] for x in seri)} tayangan")
    for b in sorted(bulan)[-6:]:
        tayang, posisi = bulan[b]
        print(f"      {b}: {tayang:>3} tayang | posisi rata-rata {round(sum(posisi)/len(posisi),1)}")

print("\n=== 25 kueri teratas 90 hari (keseluruhan) ===")
rows90 = q(["query"], S(akhir - timedelta(days=89)), S(akhir), 200)
for r in sorted(rows90, key=lambda x: -x["impressions"])[:25]:
    print(f"   {r['clicks']:>2} klik | {r['impressions']:>4} tayang | pos {round(r['position'],1):>6} | {r['keys'][0][:56]}")

print("\n=== kekuatan on-page: kata kunci di judul, H1, meta ===")
spec = importlib.util.spec_from_file_location("cfg_tslaw", f"{WS}/cfg_tslaw.py")
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
DOM = "www.tslaw.id"
AUTH = base64.b64encode(f'{m.CFG["user"]}:{m.CFG["pass"]}'.encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}


def rest(p):
    r = urllib.request.Request(f"https://{DOM}{p}", headers={"Authorization": f"Basic {AUTH}", **UA})
    try:
        with urllib.request.urlopen(r, timeout=150) as x:
            return json.loads(x.read())
    except Exception as e:
        return {"err": str(e)[:80]}


posts, page = [], 1
while True:
    d = rest(f"/wp-json/wp/v2/posts?per_page=100&page={page}&status=publish&context=edit&_fields=id,slug,title,content")
    if not isinstance(d, list):
        break
    posts += d
    if len(d) < 100:
        break
    page += 1
print(f"   artikel terbit: {len(posts)}")

kata = Counter()
menyebut = {"law firm surabaya": 0, "konsultan hukum": 0, "pengacara surabaya": 0, "advokat": 0}
tautan_beranda = 0
for p in posts:
    isi = (p.get("content", {}).get("raw", "") or "").lower()
    for frasa in menyebut:
        if frasa in isi:
            menyebut[frasa] += 1
    tautan_beranda += len(re.findall(r'href="https://www\.tslaw\.id/?"', isi))
print("   artikel yang menyebut:")
for k, v in menyebut.items():
    print(f"      {k:<20} {v} artikel")
print(f"   tautan balik ke beranda dari artikel: {tautan_beranda}")

st, h = "", ""
try:
    h = urllib.request.urlopen(urllib.request.Request(f"https://{DOM}/", headers=UA), timeout=120).read().decode("utf-8", "replace")
except Exception as e:
    print("   beranda gagal dibaca:", str(e)[:60])
if h:
    print(f"   beranda: {len(h)} byte | kata 'law firm' muncul {len(re.findall('law firm', h, re.I))}x | "
          f"'surabaya' {len(re.findall('surabaya', h, re.I))}x")
    h1 = re.findall(r"<h1[^>]*>(.*?)</h1>", h, re.S)
    print(f"   H1: {[re.sub('<[^>]+>','',x).strip()[:70] for x in h1[:2]]}")
    print(f"   jumlah H2: {len(re.findall('<h2', h, re.I))} | H3: {len(re.findall('<h3', h, re.I))}")
