#!/usr/bin/env python3
"""Hitung artikel DAS tanpa impresi (kandidat prune) + deteksi duplikat slug."""
import base64, json, 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("/home/mantapman/.hermes/gsc_service_account.json",
                                                              scopes=["https://www.googleapis.com/auth/webmasters.readonly"])
gsc = build("webmasters", "v3", credentials=creds, cache_discovery=False)
S = "https://dasindonesia.com/"
e = date.today() - timedelta(days=2)
S90 = (e - timedelta(days=89)).isoformat()
END = e.isoformat()

pages = {}
r = gsc.searchanalytics().query(siteUrl=S, body={"startDate": S90, "endDate": END, "dimensions": ["page"], "rowLimit": 1000}).execute().get("rows", [])
for x in r:
    pages[x["keys"][0]] = x
print(f"URL dengan impresi (90d): {len(pages)}")

AUTH = base64.b64encode(b"bambangbot:u3a1 G2pQ 3SWY f0zI OlGP YAjU").decode()


def api(p):
    req = urllib.request.Request("https://dasindonesia.com" + p, headers={"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"})
    return json.loads(urllib.request.urlopen(req, timeout=240).read())


posts, page = [], 1
while True:
    d = api(f"/wp-json/wp/v2/posts?per_page=100&page={page}&_fields=id,slug,title,date,link")
    posts += d
    if len(d) < 100:
        break
    page += 1

nol = [p for p in posts if p["link"] not in pages]
print(f"total post: {len(posts)} | TANPA impresi 90 hari: {len(nol)} ({len(nol)/len(posts)*100:.0f}%)")

dup = [p for p in posts if re.search(r"-\d+$", p["slug"])]
print(f"\nslug berakhiran angka (kandidat duplikat): {len(dup)}")
for p in sorted(dup, key=lambda x: x["date"]):
    base = re.sub(r"-\d+$", "", p["slug"])
    kembar = [q for q in posts if q["slug"] in (base, base + "-2", base + "-3") and q["id"] != p["id"]]
    print(f"  #{p['id']} {p['date'][:10]} {p['slug'][:70]} | kembar: {[q['id'] for q in kembar]}")

print("\n=== 25 artikel tanpa impresi (kandidat evaluasi/prune) ===")
for p in sorted(nol, key=lambda x: x["date"], reverse=True)[:25]:
    print(f"  #{p['id']} {p['date'][:10]} {p['title']['rendered'][:72]}")

json.dump({"nol": [p["id"] for p in nol], "dup": [p["id"] for p in dup]}, open("/home/mantapman/.hermes/profiles/atun/workspace/das_prune_kandidat.json", "w"), indent=1)
