#!/usr/bin/env python3
"""Langkah 3: beri sudut berbeda untuk 4 halaman website lain + tautkan ke halaman uang #3770."""
import base64, html, json, re, sys, urllib.request, urllib.error

S = "https://studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()
TARGET = "https://studiosoft.id/jasa-pembuatan-website-profesional-untuk-usaha-jasa-di-surabaya/"

JOBS = {
    2553: {"fk": "jasa pembuatan website",
           "meta": "Jasa pembuatan website untuk bisnis di Indonesia: kenali alasan website penting, apa yang harus ada di dalamnya, dan cara memilih penyedianya."},
    3483: {"fk": "jasa pembuatan website wordpress surabaya",
           "meta": "Jasa pembuatan website wordpress surabaya dengan desain custom dan struktur SEO rapi. Simak yang perlu Anda cek sebelum memilih penyedianya."},
    7330: {"fk": "biaya jasa pembuatan website",
           "meta": "Biaya jasa pembuatan website dirinci dari paket termurah sampai custom: apa yang menentukan harga, komponen wajib, dan cara menghitung nilainya."},
    3496: {"fk": "paket jasa pembuatan website wordpress surabaya",
           "meta": "Paket jasa pembuatan website wordpress surabaya lengkap dengan fitur dan peruntukan bisnisnya, mulai Rp 3,5 juta termasuk domain dan hosting setahun."},
}
ANCHOR = "jasa pembuatan website surabaya"


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")
    try:
        with urllib.request.urlopen(r, timeout=200) as x:
            return x.status, json.loads(x.read())
    except urllib.error.HTTPError as e:
        return e.code, e.read().decode()[:200]


for pid, j in JOBS.items():
    st, p = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content,meta,title,link")
    raw = p["content"]["raw"]
    m = p["meta"]
    print(f"\n#{pid} {html.unescape(p['title']['rendered'])[:60]}")
    print(f"   fk lama  : {m.get('_yoast_wpseo_focuskw','')}")
    print(f"   meta lama: {len(m.get('_yoast_wpseo_metadesc','') or '')} char")
    print(f"   fk baru  : {j['fk']} | meta baru: {len(j['meta'])} char | keyphrase di awal: {j['meta'].lower().startswith(j['fk'].lower())}")
    print(f"   link ke #3770 sekarang: {'sudah ada' if TARGET in raw else 'BELUM'}")
    if "--apply" not in sys.argv:
        continue
    st1, _ = api(f"/wp-json/wp/v2/posts/{pid}", {"meta": {"_yoast_wpseo_focuskw": j["fk"], "_yoast_wpseo_metadesc": j["meta"]}})
    if TARGET not in raw:
        baris = f'\n<p><strong>Baca juga:</strong> <a href="{TARGET}">{ANCHOR}</a> — panduan lengkap untuk usaha jasa yang ingin website-nya mendatangkan pelanggan.</p>\n'
        mm = re.search(r"\n<h2[^>]*>\s*(FAQ|Kesimpulan|Baca Juga)", raw, re.I)
        baru = (raw[:mm.start()] + baris + raw[mm.start():]) if mm else (raw.rstrip() + "\n" + baris)
        st2, _ = api(f"/wp-json/wp/v2/posts/{pid}", {"content": baru})
    else:
        st2 = "-"
    _, chk = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content,meta")
    ok_meta = chk["meta"].get("_yoast_wpseo_metadesc") == j["meta"]
    ok_link = TARGET in chk["content"]["raw"]
    print(f"   → meta {'tersimpan' if ok_meta else 'GAGAL'} | link {'masuk' if ok_link else 'GAGAL'} (POST {st1}/{st2})")

if "--apply" not in sys.argv:
    print("\n(dry run — pakai --apply untuk menyimpan)")
