#!/usr/bin/env python3
"""Yasma: lini produk sebenarnya + kata kunci non-brand yang sudah muncul di GSC."""
import json, os, re, urllib.request
from datetime import date, timedelta
from google.oauth2 import service_account
from googleapiclient.discovery import build

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)
S = "https://yasmanatura.co.id/"
e = date.today() - timedelta(days=2)
a, b = (e - timedelta(days=89)).isoformat(), e.isoformat()

rows = gsc.searchanalytics().query(siteUrl=S, body={"startDate": a, "endDate": b, "dimensions": ["query"],
                                                    "rowLimit": 5000}).execute().get("rows", [])
BRAND = ("yasma", "yasmanatura", "yasma natura")
non = [r for r in rows if not any(x in r["keys"][0].lower() for x in BRAND)]
print(f"=== NON-BRAND di GSC ({len(non)} query) ===")
for r in sorted(non, key=lambda x: -x["impressions"])[:30]:
    print(f"  {int(r['impressions']):>5} imp | {int(r['clicks'])} klik | pos {r['position']:>5.1f} | {r['keys'][0]}")

print("\n=== klaster tema non-brand ===")
TEMA = {
    "maklon (umum)": ("maklon",),
    "minuman": ("minuman", "serbuk", "sachet", "botol"),
    "herbal/jamu": ("herbal", "jamu", "temulawak", "kunyit", "jahe", "sirih"),
    "madu": ("madu",),
    "teh": ("teh",),
    "skincare/kosmetik": ("skincare", "kosmetik", "kecantikan", "serum"),
    "suplemen/vitamin": ("suplemen", "vitamin", "kapsul"),
    "pabrik/produksi": ("pabrik", "produksi", "oem", "odm", "jasa"),
    "kopi/lainnya": ("kopi", "stevia", "gula", "cokelat"),
}
for nama, kws in TEMA.items():
    grp = [r for r in non if any(k in r["keys"][0].lower() for k in kws)]
    if not grp:
        continue
    imp = sum(r["impressions"] for r in grp)
    klik = sum(r["clicks"] for r in grp)
    pos = sum(r["position"] * r["impressions"] for r in grp) / imp if imp else 0
    top = "; ".join(f"{x['keys'][0]} ({int(x['impressions'])})" for x in sorted(grp, key=lambda y: -y["impressions"])[:3])
    print(f"  {nama:<20} {len(grp):>3} query | {int(imp):>5} imp | {int(klik):>3} klik | pos {pos:>5.1f} | {top[:80]}")

print("\n=== lini produk dari halaman /produk/ ===")
try:
    r = urllib.request.Request(S + "wp-json/wp/v2/pages/23?context=edit", headers={"User-Agent": "Mozilla/5.0"})
    d = json.loads(urllib.request.urlopen(r, timeout=60).read())
    teks = re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", d["content"]["raw"]))
    print(" ", teks[:900])
except Exception as ex:
    print("  gagal:", str(ex)[:80])
