#!/usr/bin/env python3
"""DAS Bengkel — posisi nyata di Google untuk kata kunci uang (Serper, 3 sampel per kata kunci)."""
import json, statistics, time, urllib.error, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
DOM = "dasindonesia.com"
KUNCI = json.load(open(f"{WS}/.serper_token.json"))["key"]
H = {"X-API-KEY": KUNCI, "Content-Type": "application/json", "User-Agent": "Mozilla/5.0"}
KATA = ["bengkel mobil surabaya", "servis mobil surabaya", "bengkel transmisi matic surabaya",
        "bengkel spesialis nissan surabaya", "bengkel mercy surabaya", "bengkel toyota surabaya",
        "bengkel lexus surabaya", "bengkel mobil terdekat", "bengkel mobil buka hari minggu"]


def cari(q, jumlah=20):
    body = json.dumps({"q": q, "gl": "id", "hl": "id", "num": jumlah}).encode()
    for _ in range(3):
        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}
        except Exception:
            time.sleep(3)
    return {"err": "gagal"}


hasil = []
print("=== posisi DAS di Google (3 sampel, nilai tengah) ===")
for kw in KATA:
    pos, atas, ai, url = [], [], False, None
    for _ in range(3):
        d = cari(kw)
        if "err" in d:
            break
        org = d.get("organic") or []
        p = next((i for i, h in enumerate(org, 1) if DOM in str(h.get("link", ""))), None)
        pos.append(p)
        if not atas:
            atas = [str(h.get("link", "")).split("/")[2].replace("www.", "") for h in org[:3]]
        ai = ai or bool(d.get("aiOverview"))
        url = url or next((h.get("link") for h in org if DOM in str(h.get("link", ""))), None)
        time.sleep(0.6)
    ada = [p for p in pos if p]
    tengah = int(statistics.median(ada)) if ada else None
    hasil.append({"kata_kunci": kw, "posisi": tengah, "mentah": pos, "url": url,
                  "tiga_teratas": atas, "ai_overview": ai})
    tanda = "✅" if tengah and tengah <= 3 else ("⚠" if tengah and tengah <= 10 else "❌")
    print(f"  {tanda} «{kw}» → {'#' + str(tengah) if tengah else 'di luar 20'} {pos} | "
          f"{'AI Overview ' if ai else ''}3 teratas: {', '.join(atas[:3])}")
    if url:
        print(f"      halaman: {url.split(DOM)[-1][:70]}")

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