#!/usr/bin/env python3
"""1) Naikkan #7530 dan #7532 ke >=1.000 kata. 2) Ukur seluruh artikel publish vs garis 1.000 kata."""
import base64, html, json, re, time, urllib.request, urllib.error

S = "https://studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()
ANCHOR = "<h2>Pertanyaan yang sering muncul</h2>"

TAMBAHAN = {
    7530: [
        "<h2>Berapa lama sampai bisa menulis prompt sendiri</h2>",
        "<p>Biasanya dua sampai tiga pekan bila dipakai setiap hari. Yang mempercepat: menyimpan setiap prompt yang berhasil, dan mencatat satu baris tentang mengapa hasilnya bagus. Catatan itu yang nanti jadi panduan tim, bukan teori dari internet.</p>",
        "<h2>Menghindari hasil yang berulang-ulang</h2>",
        "<p>Kalau keluaran selalu mirip, biasanya karena konteks yang dimasukkan juga selalu sama. Coba ganti sudutnya: tulis untuk pelanggan baru, untuk pelanggan lama yang komplain, atau untuk orang yang belum tahu apa pun soal produk Anda. Satu perubahan sudut menghasilkan keluaran yang berbeda jauh.</p>",
    ],
    7532: [
        "<h2>Mulai dari mana kalau timnya cuma dua orang</h2>",
        "<p>Pilih satu alat untuk pekerjaan yang paling sering diulang, biasanya menjawab pertanyaan pelanggan atau menulis konten. Jalankan empat pekan, catat waktu yang dihemat, baru pertimbangkan alat kedua. Dua orang sudah cukup untuk mengelola satu alat dengan baik.</p>",
        "<h2>Tanda alatnya sudah memberi hasil</h2>",
        "<p>Ada tiga tanda: pekerjaan yang dulu menyita sehari sekarang selesai dalam hitungan jam, tidak ada pekerjaan yang tertunda karena menunggu alat, dan pemilik pekerjaan tahu persis apa yang harus diperiksa. Kalau ketiganya terpenuhi, alat itu layak diteruskan.</p>",
    ],
}


def api(path, data=None):
    h = {"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"}
    body = None
    if data is not None:
        body = json.dumps(data).encode(); h["Content-Type"] = "application/json"
    r = urllib.request.Request(S + path, data=body, headers=h, method="POST" if data else "GET")
    err = None
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=200) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            if e.code in (404, 500, 502, 503, 504):
                time.sleep(3); continue
            return e.code, e.read().decode()[:200]
        except Exception as e:
            time.sleep(3); err = e
    return 0, str(err)[:150] if err else 'gagal setelah 3 percobaan'


print("=== 1. Naikkan ke >=1.000 kata ===")
for pid, bagian in TAMBAHAN.items():
    st, p = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content,status,date")
    raw = p["content"]["raw"]
    sebelum = len(html.unescape(re.sub(r"<[^>]+>", " ", raw)).split())
    if bagian[0] in raw:
        print(f"  #{pid} sudah ditambah — skip"); continue
    baru = raw.replace(ANCHOR, "\n".join(bagian) + "\n" + ANCHOR, 1)
    api(f"/wp-json/wp/v2/posts/{pid}", {"content": baru})
    _, chk = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content")
    sesudah = len(html.unescape(re.sub(r"<[^>]+>", " ", chk["content"]["raw"])).split())
    print(f"  #{pid} {sebelum} → {sesudah} kata | status {p['status']} | tayang {p['date']}")

print("\n=== 2. Seluruh artikel publish vs garis 1.000 kata ===")
posts, page = [], 1
while True:
    st, d = api(f"/wp-json/wp/v2/posts?per_page=100&page={page}&context=edit&_fields=id,link,title,date,content")
    if not isinstance(d, list):
        break
    posts += d
    if len(d) < 100:
        break
    page += 1

pita = {"<600": [], "600-999": [], "1000+": []}
for p in posts:
    raw = p["content"]["raw"] if isinstance(p["content"], dict) else ""
    k = len(html.unescape(re.sub(r"<[^>]+>", " ", raw)).split())
    kunci = "<600" if k < 600 else ("600-999" if k < 1000 else "1000+")
    pita[kunci].append((k, p["id"], html.unescape(p["title"]["rendered"]), p["date"][:10]))

print(f"  total artikel publish: {len(posts)}")
for nama in ("<600", "600-999", "1000+"):
    print(f"  {nama:>8} kata: {len(pita[nama]):>3} artikel")
print("\n  10 artikel terpendek:")
for k, pid, judul, tgl in sorted(pita["<600"])[:10]:
    print(f"    {k:>4} kata | #{pid} | {tgl} | {judul[:58]}")
print("\n  contoh dari pita 600-999 (yang paling dekat garis):")
for k, pid, judul, tgl in sorted(pita["600-999"], reverse=True)[:8]:
    print(f"    {k:>4} kata | #{pid} | {tgl} | {judul[:58]}")
