#!/usr/bin/env python3
"""Pass 2 DAS: link internal dari artikel batch Alphard ke halaman utama klaster + bersihkan duplikat."""
import base64, json, re, sys, urllib.request, urllib.error

SITE = "https://dasindonesia.com"
AUTH = base64.b64encode(b"bambangbot:u3a1 G2pQ 3SWY f0zI OlGP YAjU").decode()
MAIN_A = "https://dasindonesia.com/bengkel-spesialis-alphard-surabaya/"
MAIN_M = "https://dasindonesia.com/bengkel-mobil-mewah-di-surabaya-panduan-merawat-alphard-land-cruiser-dan-sedan-premium/"
MAIN_B = "https://dasindonesia.com/bengkel-mobil-bmw-mercy-surabaya/"

JOBS = {
    6929: [(MAIN_A, "bengkel spesialis Alphard Surabaya")],
    8051: [(MAIN_A, "bengkel spesialis Alphard Surabaya")],
    8057: [(MAIN_A, "bengkel spesialis alphard surabaya")],
    8059: [(MAIN_A, "bengkel spesialis Alphard Surabaya")],
    8065: [(MAIN_A, "bengkel alphard Surabaya")],
    8067: [(MAIN_A, "bengkel spesialis Alphard Surabaya")],
    8089: [(MAIN_A, "bengkel Alphard Surabaya")],
    8294: [(MAIN_A, "bengkel mobil Alphard Surabaya")],
    8296: [(MAIN_B, "bengkel BMW Surabaya")],
}


def api(path, data=None, method=None):
    method = method or ("POST" if data is not None else "GET")
    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(SITE + path, data=body, headers=h, method=method)
    try:
        with urllib.request.urlopen(r, timeout=240) as x:
            return x.status, json.loads(x.read())
    except urllib.error.HTTPError as e:
        return e.code, e.read().decode()[:300]


apply_ = "--apply" in sys.argv
for pid, links in sorted(JOBS.items()):
    st, cur = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content,title")
    if not isinstance(cur, dict):
        print(f"  #{pid} gagal ambil konten ({st})")
        continue
    raw = cur["content"]["raw"]
    item = [f'<li><a href="{u}">{a}</a></li>' for u, a in links if u not in raw]
    if not item:
        print(f"  #{pid} sudah ada link-nya — skip")
        continue
    print(f"  #{pid} {cur['title']['rendered'][:50]} → +{len(item)} link")
    if apply_:
        m = re.search(r"(<h2>\s*Baca Juga\s*</h2>\s*<ul>)(.*?)(</ul>)", raw, re.S | re.I)
        if m:
            baru = raw[:m.end(2)] + "\n" + "\n".join(item) + "\n" + raw[m.end(2):]
        else:
            blok = "\n<h2>Baca Juga</h2>\n<ul>" + "\n".join(item) + "</ul>\n"
            mm = re.search(r"\n<h2>\s*(FAQ|Kesimpulan)", raw, re.I)
            baru = (raw[:mm.start()] + blok + raw[mm.start():]) if mm else (raw.rstrip() + "\n" + blok)
        st2, res = api(f"/wp-json/wp/v2/posts/{pid}", {"content": baru})
        print(f"     POST {st2} | {'masuk' if isinstance(res, dict) and 'Baca Juga' in json.dumps(res) else 'GAGAL'}")

if not apply_:
    print("\n(dry run)")
