#!/usr/bin/env python3
"""Pilih kata kunci terbaik untuk artikel baru TSC: gabungan data GSC + cek pesaing di SERP.

Keluaran: drafts/tsc_kandidat_keyword.json + ringkasan di layar.
"""
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"
SITE = "https://www.theskincodeclinic.com/"
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)

# 1. kueri dari GSC
rows = gsc.searchanalytics().query(siteUrl=SITE, body={
    "startDate": AWAL.isoformat(), "endDate": AKHIR.isoformat(), "dimensions": ["query"],
    "rowLimit": 1000}).execute().get("rows", [])
print(f"kueri GSC 90 hari: {len(rows)}")

# 2. daftar slug artikel yang sudah ada (untuk cek tumpang tindih)
KEY = json.load(open(f"{WS}/.serper_token.json"))["key"]
UA = {"User-Agent": "Mozilla/5.0"}


def serper(q, num=10):
    body = json.dumps({"q": q, "gl": "id", "hl": "id", "num": num}).encode()
    r = urllib.request.urlopen(urllib.request.Request(
        "https://google.serper.dev/search", data=body,
        headers={"X-API-KEY": KEY, "Content-Type": "application/json", **UA}), timeout=90)
    return json.loads(r.read())


KANDIDAT = [
    "dokter kulit sidoarjo",
    "dokter kulit krian",
    "klinik kecantikan krian",
    "dokter spesialis kulit dan kelamin terdekat",
    "perawatan jerawat krian",
    "facial medis sidoarjo",
    "dokter kulit mojokerto",
    "klinik kulit dan kelamin sidoarjo",
]

hasil = []
for kw in KANDIDAT:
    g = next((r for r in rows if r["keys"][0].lower() == kw), None)
    d = serper(kw)
    org = d.get("organic") or []
    pos = next((i for i, h in enumerate(org, 1) if "theskincodeclinic" in str(h.get("link", ""))), None)
    atas = [str(h.get("link", "")).split("/")[2].replace("www.", "") for h in org[:5]]
    hasil.append({"kata_kunci": kw,
                  "gsc_tayang": int(g["impressions"]) if g else 0,
                  "gsc_klik": int(g["clicks"]) if g else 0,
                  "gsc_posisi": round(g["position"], 1) if g else None,
                  "serp_posisi": pos, "pesaing": atas,
                  "map_pack": bool(d.get("places") or d.get("localPack")),
                  "ai_overview": bool(d.get("aiOverview"))})
    tanda = "✅" if pos and pos <= 3 else ("⚠" if pos and pos <= 10 else "❌")
    print(f"  {tanda} «{kw}» GSC {hasil[-1]['gsc_tayang']} tayang / pos {hasil[-1]['gsc_posisi']} · "
          f"SERP {'#' + str(pos) if pos else 'luar 10'} · map pack {'ya' if hasil[-1]['map_pack'] else 'tidak'}")
    print(f"      5 teratas: {', '.join(atas)}")
    time.sleep(0.8)

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