#!/usr/bin/env python3
"""Pilih kata kunci terbaik untuk TSC: gabungkan permintaan nyata dari GSC + perluasan Google + siapa pesaingnya."""
import json, os, re, time, urllib.error, urllib.parse, 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"
SITUS = "https://www.theskincodeclinic.com/"
TOKEN = json.load(open(f"{WS}/.serper_token.json"))
KEY = TOKEN.get("api_key") or TOKEN.get("key") or list(TOKEN.values())[0]
UA = {"User-Agent": "Mozilla/5.0", "X-API-KEY": KEY, "Content-Type": "application/json"}

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=SITUS, body={
    "startDate": AWAL.isoformat(), "endDate": AKHIR.isoformat(), "dimensions": ["query"],
    "rowLimit": 3000}).execute().get("rows", [])
gsc_q = {r["keys"][0].lower(): {"tayang": int(r["impressions"]), "klik": int(r["clicks"]),
                                "posisi": round(r["position"], 1)} for r in rows}
print(f"=== GSC 90 hari: {len(gsc_q)} kueri ===\n")
print("kueri dengan tayangan terbanyak:")
for k, v in sorted(gsc_q.items(), key=lambda x: -x[1]["tayang"])[:30]:
    print(f"   {v['tayang']:>5} tayang · {v['klik']:>2} klik · pos {v['posisi']:>5} · «{k}»")


def serper(path, body):
    r = urllib.request.Request(f"https://google.serper.dev/{path}",
                               data=json.dumps(body).encode(), headers=UA)
    try:
        return json.loads(urllib.request.urlopen(r, timeout=60).read())
    except Exception as e:
        return {"err": str(e)[:50]}


SEED = ["dokter kulit krian", "klinik kecantikan krian", "dokter kulit sidoarjo",
        "klinik kulit sidoarjo", "perawatan jerawat sidoarjo", "dokter spesialis kulit sidoarjo"]
print("\n=== perluasan dari Google (autocomplete) ===")
usul = set()
for s in SEED:
    d = serper("autocomplete", {"q": s, "gl": "id", "hl": "id"})
    for x in d.get("suggestions", [])[:10]:
        v = x.get("value", "")
        if v and v.lower() != s:
            usul.add(v.lower())
    time.sleep(0.3)
print(f"   {len(usul)} usulan terkumpul")
for u in sorted(usul)[:30]:
    print(f"     {u}")

print("\n=== pesaing di 20 besar (siapa yang menempati) ===")
AGREGAT = ("halodoc", "alodokter", "klinikpintar", "hellosehat", "dokter.id", "sehatq", "klikdokter",
           "instagram", "facebook", "tiktok", "youtube", "google.com", "maps")
peringkat = {}
for kw in list(SEED) + sorted(usul)[:14]:
    d = serper("search", {"q": kw, "gl": "id", "hl": "id", "num": 20})
    org = d.get("organic", [])
    if not org:
        continue
    tsc = next((i for i, h in enumerate(org, 1) if "theskincodeclinic" in str(h.get("link", "")).lower()), None)
    agregat = sum(1 for h in org if any(a in str(h.get("link", "")).lower() for a in AGREGAT))
    lokal = sum(1 for h in org[:10] if not any(a in str(h.get("link", "")).lower() for a in AGREGAT))
    peringkat[kw] = {"tsc": tsc, "agregat": agregat, "lokal_di10": lokal, "n": len(org)}
    print(f"   «{kw[:44]:<44} TSC {'#' + str(tsc) if tsc else '>20':<5} · agregator di 20: {agregat:>2} · "
          f"situs lokal di 10 besar: {lokal}")
    time.sleep(0.4)

json.dump({"gsc": gsc_q, "serp": peringkat}, open(f"{WS}/drafts/tsc_pilih_kata_kunci.json", "w"),
          ensure_ascii=False, indent=1)
print("\n→ drafts/tsc_pilih_kata_kunci.json")
