#!/usr/bin/env python3
"""Bedah 3 kueri uang StudioSoft: halaman kita vs 3 pesaing teratas (isi, judul, sub-judul, tautan)."""
import json, os, re, urllib.request
from datetime import date, timedelta

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

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0 Safari/537.36"}
KUERI = ["jasa seo surabaya", "digital agency surabaya", "digital marketing agency surabaya"]

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)
AWAL = AKHIR - timedelta(days=89)
rows = gsc.searchanalytics().query(siteUrl="https://studiosoft.id/", body={
    "startDate": AWAL.isoformat(), "endDate": AKHIR.isoformat(),
    "dimensions": ["query", "page"], "rowLimit": 5000}).execute().get("rows", [])

T = json.load(open(f"{WS}/.serper_token.json"))
KEY = T.get("api_key") or T.get("key") or list(T.values())[0]
SH = {"User-Agent": "Mozilla/5.0", "X-API-KEY": KEY, "Content-Type": "application/json"}


def profil(url):
    """Ambil ukuran halaman sederhana: jumlah kata, H1/H2/H3, tautan internal, FAQ, schema."""
    try:
        t = urllib.request.urlopen(urllib.request.Request(url, headers=UA), timeout=45).read().decode("utf-8", "replace")
    except Exception as e:
        return {"err": str(e)[:30]}
    teks = re.sub(r"<script.*?</script>|<style.*?</style>", " ", t, flags=re.S | re.I)
    teks = re.sub("<[^>]+>", " ", teks)
    kata = len(re.sub(r"\s+", " ", teks).split())
    return {
        "kata": kata,
        "h1": len(re.findall(r"<h1", t, re.I)),
        "h2": len(re.findall(r"<h2", t, re.I)),
        "h3": len(re.findall(r"<h3", t, re.I)),
        "gambar": len(re.findall(r"<img", t, re.I)),
        "judul": (re.search(r"<title>(.*?)</title>", t, re.S).group(1).strip()[:70]
                  if re.search(r"<title>(.*?)</title>", t, re.S) else "-"),
        "schema": "FAQPage" if "FAQPage" in t else ("Article" if '"Article"' in t else "tidak ada"),
        "tabel": len(re.findall(r"<table", t, re.I)),
    }


hasil = {}
for q in KUERI:
    milik = [(r["keys"][1], int(r["impressions"]), round(r["position"], 1))
             for r in rows if r["keys"][0].lower() == q]
    milik.sort(key=lambda x: -x[1])
    url_kita = milik[0][0] if milik else None
    d = json.loads(urllib.request.urlopen(urllib.request.Request(
        "https://google.serper.dev/search",
        data=json.dumps({"q": q, "gl": "id", "hl": "id", "num": 10}).encode(), headers=SH), timeout=60).read())
    org = d.get("organic", [])
    pesaing = [h["link"] for h in org if "studiosoft.id" not in h["link"]][:3]
    print(f"\n■ «{q}»  (halaman kita: {(url_kita or '-').replace('https://studiosoft.id', '')} "
          f"· pos {milik[0][2] if milik else '-'})")
    if url_kita:
        p = profil(url_kita)
        print(f"   KITA     {p.get('kata', '-'):>5} kata · H2 {p.get('h2', '-')} · "
              f"gambar {p.get('gambar', '-')} · skema {p.get('schema', '-')} · tabel {p.get('tabel', '-')}")
        hasil[q] = {"kita": {"url": url_kita, **p}, "pesaing": []}
    for u in pesaing:
        p = profil(u)
        print(f"   PESAING  {p.get('kata', '-'):>5} kata · H2 {p.get('h2', '-')} · "
              f"gambar {p.get('gambar', '-')} · skema {p.get('schema', '-')} · {u[:52]}")
        if url_kita:
            hasil[q]["pesaing"].append({"url": u, **p})

json.dump(hasil, open(f"{WS}/drafts/ss_bedah_kueri_uang.json", "w"), ensure_ascii=False, indent=1)
print("\n→ drafts/ss_bedah_kueri_uang.json")
