#!/usr/bin/env python3
"""Serper: petakan posisi semua klien di SERP Google untuk kata kunci utamanya."""
import json, sys, time, urllib.error, urllib.request
from datetime import datetime

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
KUNCI = json.load(open(f"{WS}/.serper_token.json"))["key"]
H = {"X-API-KEY": KUNCI, "Content-Type": "application/json", "User-Agent": "Mozilla/5.0"}

# domain klien + kata kunci utama yang layak diperiksa
KLIEN = [
    ("StudioSoft", "studiosoft.id", ["jasa seo surabaya", "digital agency surabaya", "jasa pembuatan website surabaya"]),
    ("DAS Bengkel Indonesia", "dasindonesia.com", ["bengkel mobil surabaya", "servis mobil surabaya", "bengkel nissan surabaya"]),
    ("TSLaw", "tslaw.id", ["law firm surabaya", "konsultan hukum surabaya", "pengacara surabaya"]),
    ("The Skin Code Clinic", "theskincodeclinic.com", ["klinik kulit surabaya", "perawatan kulit surabaya"]),
    ("Surabaya Skin Centre", "surabaya-skincentre.com", ["klinik kulit surabaya", "laser kulit surabaya"]),
    ("DMark Creative", "dmark.id", ["digital marketing agency", "creative agency surabaya"]),
    ("Yasmanatura", "yasmanatura.co.id", ["serbuk beras yasmanatura", "scrub beras"]),
    ("Kendangsari Hospital", "rsia.kendangsari.com", ["rsia surabaya", "rumah sakit ibu dan anak surabaya"]),
    ("EveryBe", "everybeofficial.com", ["feminine v spray", "tone up body lotion"]),
    ("Klinik Metamorf", "klinikmetamorf.com", ["klinik kecantikan surabaya"]),
]


def cari(q, jumlah=10):
    body = json.dumps({"q": q, "gl": "id", "hl": "id", "num": jumlah}).encode()
    try:
        r = urllib.request.urlopen(urllib.request.Request("https://google.serper.dev/search", data=body, headers=H), timeout=90)
        return json.loads(r.read())
    except urllib.error.HTTPError as e:
        return {"err": e.code, "msg": e.read().decode("utf-8", "replace")[:150]}
    except Exception as e:
        return {"err": str(e)[:80]}


hasil = []
print("=" * 70)
for nama, domain, katakunci in KLIEN:
    print(f"\n■ {nama} ({domain})")
    for kw in katakunci:
        d = cari(kw)
        if "err" in d:
            print(f"   ❌ «{kw}» → {d['err']} {d.get('msg','')[:80]}")
            continue
        organic = d.get("organic") or []
        posisi = None
        for i, h in enumerate(organic, 1):
            if domain in str(h.get("link", "")):
                posisi = i
                break
        pesaing = [f"{h.get('link','').split('/')[2] if '//' in str(h.get('link','')) else '?'}"
                   for h in organic[:3]]
        ai = "AI Overview ✓" if d.get("aiOverview") else "AI Overview –"
        print(f"   «{kw}»")
        print(f"      posisi klien : {'#' + str(posisi) if posisi else 'TIDAK ADA di 10 besar'}")
        print(f"      3 teratas    : {', '.join(pesaing)}")
        print(f"      {ai} | hasil: {len(organic)}")
        hasil.append({"klien": nama, "domain": domain, "kata_kunci": kw, "posisi": posisi,
                      "pesaing": pesaing, "ai_overview": bool(d.get("aiOverview"))})
        time.sleep(0.6)

print("\n" + "=" * 70)
print("=== ringkasan ===")
ada = [h for h in hasil if h["posisi"]]
tidak = [h for h in hasil if not h["posisi"]]
print(f"   kata kunci diperiksa : {len(hasil)}")
print(f"   klien masuk 10 besar : {len(ada)}")
print(f"   klien TIDAK masuk    : {len(tidak)}")
print(f"   kata kunci dengan AI Overview: {sum(1 for h in hasil if h['ai_overview'])}")

with open(f"{WS}/drafts/serp_semua_klien_{datetime.now().strftime('%Y%m%d')}.md", "w") as f:
    f.write(f"# Peta Posisi Klien di Google\n\nDiperiksa {datetime.now().strftime('%d %B %Y %H:%M')} WIB · sumber: Serper.dev (Google, gl=id, hl=id)\n\n")
    for h in hasil:
        f.write(f"- **{h['klien']}** — «{h['kata_kunci']}» → "
                f"{'posisi #' + str(h['posisi']) if h['posisi'] else 'tidak masuk 10 besar'} | "
                f"pesaing: {', '.join(h['pesaing'])} | AI Overview: {'ada' if h['ai_overview'] else 'tidak'}\n")
json.dump(hasil, open(f"{WS}/drafts/serp_semua_klien.json", "w"), indent=1, ensure_ascii=False)
print(f"\n→ drafts/serp_semua_klien_{datetime.now().strftime('%Y%m%d')}.md")
