#!/usr/bin/env python3
"""Cek kelengkapan 26 draft StudioSoft terhadap standar SEO yang kita pakai."""
import base64, html, json, re, urllib.request

S = "https://studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()


def wp(path):
    r = urllib.request.Request(S + path, headers={"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"})
    return json.loads(urllib.request.urlopen(r, timeout=240).read())


drafts, page = [], 1
while True:
    d = wp(f"/wp-json/wp/v2/posts?per_page=100&page={page}&context=edit&status=draft"
           f"&_fields=id,slug,title,date,content,meta,featured_media,categories,tags")
    drafts += d
    if len(d) < 100:
        break
    page += 1

print(f"{'id':>6} {'kata':>5} {'meta':>5} {'fk':<4} {'img':<4} {'kat':>4} {'tag':>4} {'FAQ':<4} {'link':<5} judul")
belum_standar = 0
for p in sorted(drafts, key=lambda x: x["id"]):
    raw = p["content"]["raw"] if isinstance(p["content"], dict) else ""
    kata = len(html.unescape(re.sub(r"<[^>]+>", " ", raw)).split())
    m = p.get("meta", {}) or {}
    md = m.get("_yoast_wpseo_metadesc", "") or ""
    fk = m.get("_yoast_wpseo_focuskw", "") or ""
    faq = "FAQPage" in raw or bool(re.search(r"<h[23][^>]*>\s*(FAQ|Pertanyaan)", raw, re.I))
    link = len(set(re.findall(r'href="https://studiosoft\.id/([^"#?]+)', raw)))
    print(f"{p['id']:>6} {kata:>5} {len(md):>5} {'ada' if fk else '-':<4} "
          f"{'ada' if p.get('featured_media') else 'TIDAK':<4} {len(p.get('categories', [])):>4} "
          f"{len(p.get('tags', [])):>4} {'ada' if faq else 'TIDAK':<4} {link:<5} {html.unescape(p['title']['rendered'])[:44]}")
    if kata < 800 or not md or not p.get("featured_media"):
        belum_standar += 1

print(f"\narti kolom: kata = jumlah kata | meta = panjang meta description | fk = focus keyphrase")
print(f"            img = featured image | kat/tag = kategori & tag | FAQ = schema/heading FAQ | link = link internal")
print(f"\ndraft yang BELUM memenuhi standar (jauh dari ~1.300 kata / meta 120-158 / ada gambar): {belum_standar} dari {len(drafts)}")
