#!/usr/bin/env python3
"""Cek keyword DAS Bengkel Indonesia: Alphard, Lexus, dan klaster bengkel brand lain (GSC 90 hari)."""
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)
SITE = "https://dasindonesia.com/"
e = date.today() - timedelta(days=2)
s90 = (e - timedelta(days=89)).isoformat()
s28 = (e - timedelta(days=27)).isoformat()
end = e.isoformat()
print(f"periode 90d: {s90} → {end}\n")


def q(body):
    return gsc.searchanalytics().query(siteUrl=SITE, body=body).execute().get("rows", [])


# 1. total situs
tot = q({"startDate": s90, "endDate": end, "dimensions": [], "rowLimit": 1})
if tot:
    r = tot[0]
    print(f"TOTAL 90d: {int(r['clicks'])} klik | {int(r['impressions'])} impresi | CTR {r['ctr']*100:.2f}% | pos {r['position']:.1f}")

# 2. semua query
rows = q({"startDate": s90, "endDate": end, "dimensions": ["query"], "rowLimit": 5000})
print(f"query unik 90d: {len(rows)}")

BRANDS = ["alphard", "lexus", "voxy", "fortuner", "pajero", "innova", "bmw", "mercedes", "benz",
          "toyota", "honda", "nissan", "mitsubishi", "wuling", "chery", "hyundai", "mazda",
          "porsche", "audi", "land rover", "harrier", "camry", "civic", "hrv", "crv", "xenia",
          "avanza", "ertiga", "rush", "terios", "starex", "veloz", "brio", "jazz", "yaris"]

print("\n=== KLASTER BRAND (query mengandung nama merek) ===")
hasil = {}
for b in BRANDS:
    sub = [r for r in rows if b in r["keys"][0].lower()]
    if not sub:
        continue
    imp = sum(r["impressions"] for r in sub)
    kl = sum(r["clicks"] for r in sub)
    pos = sum(r["position"] * r["impressions"] for r in sub) / imp if imp else 0
    hasil[b] = (len(sub), imp, kl, pos)
for b, (n, imp, kl, pos) in sorted(hasil.items(), key=lambda x: -x[1][1]):
    print(f"  {b:<12} {n:>3} query | {int(imp):>6} imp | {int(kl):>4} klik | CTR {kl/imp*100 if imp else 0:>5.1f}% | pos {pos:>5.1f}")

print("\n=== DETAIL: semua query Alphard & Lexus ===")
for b in ("alphard", "lexus"):
    print(f"\n-- {b} --")
    for r in sorted([r for r in rows if b in r["keys"][0].lower()], key=lambda x: -x["impressions"]):
        print(f"   {int(r['impressions']):>4} imp | {int(r['clicks']):>3} klik | CTR {r['ctr']*100:>5.1f}% | pos {r['position']:>5.1f} | {r['keys'][0]}")

# 3. halaman yang menahan query alphard/lexus
print("\n=== halaman penahan query alphard/lexus ===")
for b in ("alphard", "lexus"):
    body = {"startDate": s90, "endDate": end, "dimensions": ["page"],
            "dimensionFilterGroups": [{"filters": [{"dimension": "query", "operator": "contains", "expression": b}]}],
            "rowLimit": 10}
    for r in q(body):
        print(f"  [{b}] {int(r['impressions']):>4} imp | {int(r['clicks'])} klik | pos {r['position']:>5.1f} | {r['keys'][0]}")

json.dump(rows, open("/tmp/das_queries_90d.json", "w"), indent=1)
print("\ndata mentah: /tmp/das_queries_90d.json")
