#!/usr/bin/env python3
"""Audit Yoast SEO situs LEIT Surabaya: judul SEO, meta description, focus keyphrase, og:image."""
import base64, json, os, urllib.request, urllib.error

SITE = "https://www.leitsurabaya.com"
AUTH = base64.b64encode(b"bambangbot:zibd dLIV xY8x onP9 39qL hiNr").decode()
WS = os.path.dirname(os.path.abspath(__file__))


def get(path):
    r = urllib.request.Request(SITE + path, headers={"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"})
    with urllib.request.urlopen(r, timeout=120) as x:
        return json.loads(x.read())


# 1. metadata dasar + yoast head (og:image, description)
posts = []
page = 1
while True:
    d = get(f"/wp-json/wp/v2/posts?per_page=100&page={page}&context=edit&_fields=id,link,title,date,featured_media,yoast_head_json")
    posts += d
    if len(d) < 100:
        break
    page += 1

# 2. bulk editor: focus keyphrase + override fields
fo = {}
page = 1
while True:
    d = get(f"/wp-json/yoast/v1/bulk_editor/posts?content_type=post&per_page=100&page={page}")
    for p in d["posts"]:
        fo[p["id"]] = p
    if page >= d["total_pages"]:
        break
    page += 1

rows = []
for p in sorted(posts, key=lambda x: x["date"], reverse=True):
    y = p.get("yoast_head_json", {})
    og = (y.get("og_image") or [{}])[0].get("url", "")
    rows.append({
        "id": p["id"],
        "date": p["date"][:10],
        "title": p["title"]["rendered"][:70],
        "link": p["link"],
        "seo_title": y.get("title", ""),
        "meta_desc": y.get("description", ""),
        "meta_desc_len": len(y.get("description", "")),
        "focuskw": (fo.get(p["id"]) or {}).get("focus_keyphrase", ""),
        "social_title": (fo.get(p["id"]) or {}).get("social_title", ""),
        "social_desc": (fo.get(p["id"]) or {}).get("social_description", ""),
        "social_desc_len": len((fo.get(p["id"]) or {}).get("social_description", "")),
        "og_image": og.split("/")[-1] if og else "",
        "featured_media": p.get("featured_media"),
        "robots": json.dumps(y.get("robots", {}), ensure_ascii=False),
    })

json.dump(rows, open(os.path.join(WS, "leit_yoast_audit_20260917.json"), "w"), indent=1, ensure_ascii=False)

tot = len(rows)
nod = [r for r in rows if not r["meta_desc"]]
nofk = [r for r in rows if not r["focuskw"]]
short = [r for r in rows if r["meta_desc"] and r["meta_desc_len"] < 120]
long = [r for r in rows if r["meta_desc_len"] > 158]
noog = [r for r in rows if not r["og_image"]]
print(f"TOTAL {tot} artikel")
print(f"meta description KOSONG : {len(nod)}")
print(f"meta desc <120 char     : {len(short)}")
print(f"meta desc >158 char     : {len(long)}")
print(f"focus keyphrase KOSONG  : {len(nofk)}")
print(f"og:image KOSONG         : {len(noog)}")
print("\n--- 12 terbaru ---")
print(f"{'id':>5} {'tgl':<11} {'metad':>5} {'fk':<18} og?  judul")
for r in rows[:12]:
    print(f"{r['id']:>5} {r['date']:<11} {r['meta_desc_len']:>5} {r['focuskw'][:17]:<18} {'Y' if r['og_image'] else 'N':<3}  {r['title'][:55]}")
