#!/usr/bin/env python3
"""Evaluasi kandidat halaman uang 'jasa pembuatan website surabaya' StudioSoft."""
import base64, html, json, os, re, time, urllib.request
from datetime import date, timedelta
from google.oauth2 import service_account
from googleapiclient.discovery import build

S = "https://studiosoft.id/"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()
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)
e = date.today() - timedelta(days=2)
S90, END = (e - timedelta(days=89)).isoformat(), e.isoformat()


def wp(path):
    req = urllib.request.Request(S.rstrip("/") + path, headers={"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"})
    try:
        with urllib.request.urlopen(req, timeout=120) as x:
            return json.loads(x.read())
    except Exception as ex:
        return {"err": str(ex)[:60]}


KANDIDAT = [
    ("post", 2553),
    ("post", 3483),
]
# cari juga lewat slug untuk yang belum diketahui ID-nya
SLUGS = ["jasa-pembuatan-website", "jasa-pembuatan-website-wordpress-surabaya-terpercaya",
         "jasa-pembuatan-website-profesional-untuk-usaha-jasa-di-surabaya",
         "berapa-biaya-jasa-pembuatan-website",
         "8-paket-jasa-pembuatan-website-wordpress-surabaya-termurah-di-studiosoft"]
for s in SLUGS:
    for tipe in ("posts", "pages"):
        d = wp(f"/wp-json/wp/v2/{tipe}?slug={s}&context=edit&_fields=id,link,title,content,meta,status")
        if isinstance(d, list) and d:
            KANDIDAT.append((tipe[:-1], d[0]["id"]))
            break

# data GSC per halaman (semua query)
hal = {}
for r in gsc.searchanalytics().query(siteUrl=S, body={"startDate": S90, "endDate": END, "dimensions": ["page"], "rowLimit": 500}).execute().get("rows", []):
    hal[r["keys"][0].rstrip("/")] = (int(r["impressions"]), int(r["clicks"]), r["position"])

dilihat = set()
print(f"{'tipe':<6} {'id':>6} {'kata':>5} {'form':>5} {'wa':>4} {'link_keluar':>11} {'imp90':>6} {'klik':>5} {'pos':>5}  {'judul'}")
for tipe, pid in KANDIDAT:
    if pid in dilihat:
        continue
    dilihat.add(pid)
    key = "posts" if tipe == "post" else "pages"
    d = wp(f"/wp-json/wp/v2/{key}/{pid}?context=edit&_fields=id,link,title,content,meta,status")
    if not isinstance(d, dict) or "err" in d:
        print(f"{tipe:<6} {pid:>6}  gagal ambil: {d.get('err')}"); continue
    raw = d["content"]["raw"]
    kata = len(html.unescape(re.sub(r"<[^>]+>", " ", raw)).split())
    form = len(re.findall(r"<form|wp:uagb/form|sureforms|wpforms|contact-form", raw, re.I))
    wa = len(re.findall(r"wa\.me|whatsapp", raw, re.I))
    keluar = len(set(re.findall(r'href="https://studiosoft\.id/([^"#?]+)', raw)))
    imp, klik, pos = hal.get(d["link"].rstrip("/"), (0, 0, 0))
    m = d.get("meta", {})
    print(f"{tipe:<6} {pid:>6} {kata:>5} {form:>5} {wa:>4} {keluar:>11} {imp:>6} {klik:>5} {pos:>5.1f}  {html.unescape(d['title']['rendered'])[:52]}")
    print(f"        url  : {d['link']}")
    print(f"        fk   : {m.get('_yoast_wpseo_focuskw','(kosong)')} | title: {(m.get('_yoast_wpseo_title') or '(default)')[:60]}")
