#!/usr/bin/env python3
"""Fase 1 item 3 — tautkan 15 artikel lama paling relevan ke halaman daftar agensi.
Salinan tiap artikel disimpan lebih dulu. `--go` untuk menulis.
"""
import base64, html, json, os, re, sys, time, urllib.error, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
S = "https://studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()
UA = {"User-Agent": "Mozilla/5.0"}
BACKUP = f"{WS}/ss_fase1_backup"
LOG = f"{WS}/drafts/ss_fase1_link_log.json"
TARGET = "https://studiosoft.id/digital-agency-terbaik-di-surabaya/"
ANCHOR = "daftar digital agency terbaik di Surabaya"
os.makedirs(BACKUP, exist_ok=True)

VARIAN = [
    "<p>Kalau Anda sedang membandingkan beberapa agensi sebelum memutuskan, kami merangkum pilihannya "
    "beserta pertimbangan masing-masing di <a href=\"{t}\">{a}</a>.</p>",
    "<p>Untuk melihat perbandingan penyedia jasa di Surabaya, termasuk cara menilai mana yang paling cocok, "
    "lihat <a href=\"{t}\">{a}</a>.</p>",
    "<p>Daftar agensi yang biasa dipakai bisnis di Surabaya, lengkap dengan kelebihan masing-masing, "
    "ada di <a href=\"{t}\">{a}</a>.</p>",
    "<p>Sebelum menghubungi siapa pun, ada baiknya melihat <a href=\"{t}\">{a}</a> yang kami susun "
    "bersama pertimbangannya.</p>",
]
VARIAN_DAFTAR = ("<p>Khusus wilayah Surabaya, kami merangkum pilihan agensi beserta pertimbangannya di "
                 "<a href=\"{t}\">{a}</a>.</p>")
DAFTAR_SENDIRI = {2913, 2923, 3007, 3474, 2917}


def rest(path, method="GET", data=None):
    h = {"Authorization": f"Basic {AUTH}", **UA}
    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=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:250]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


def halaman_live(slug):
    try:
        r = urllib.request.Request(f"{S}/{slug}/?nocache={int(time.time())}", headers=UA)
        with urllib.request.urlopen(r, timeout=120) as x:
            t = x.read().decode("utf-8", "replace")
        return ANCHOR.lower() in html.unescape(t).lower()
    except Exception as e:
        return f"err {str(e)[:60]}"


renc = json.load(open(f"{WS}/drafts/ss_fase1_rencana.json"))["tautan"]
print(f"=== {len(renc)} artikel akan diberi tautan ke halaman daftar ===")
for i, x in enumerate(renc):
    v = VARIAN_DAFTAR if x["id"] in DAFTAR_SENDIRI else VARIAN[i % len(VARIAN)]
    print(f"  #{x['id']:>5} varian {'khusus' if x['id'] in DAFTAR_SENDIRI else (i % len(VARIAN)) + 1} | {x['judul'][:58]}")

if "--go" not in sys.argv:
    print("\n(dry run — pakai --go)")
    sys.exit(0)

log = []
print("\n=== menulis ===")
for i, x in enumerate(renc):
    st, p = rest(f"/wp-json/wp/v2/posts/{x['id']}?context=edit&_fields=id,slug,link,content")
    if not isinstance(p, dict) or "content" not in p:
        print(f"  #{x['id']} ❌ baca gagal {st} {str(p)[:100]}")
        log.append({"id": x["id"], "ok": False, "err": f"baca {st}"})
        continue
    raw = p["content"].get("raw", "")
    if "digital-agency-terbaik-di-surabaya" in raw:
        print(f"  #{x['id']} sudah ada tautan — dilewati")
        log.append({"id": x["id"], "ok": True, "catatan": "sudah ada"})
        continue
    open(f"{BACKUP}/post_{x['id']}.txt", "w").write(raw)          # salinan pengaman
    v = VARIAN_DAFTAR if x["id"] in DAFTAR_SENDIRI else VARIAN[i % len(VARIAN)]
    tambahan = "\n\n" + v.format(t=TARGET, a=ANCHOR) + "\n"
    st2, d2 = rest(f"/wp-json/wp/v2/posts/{x['id']}", "POST", {"content": raw.rstrip() + tambahan})
    time.sleep(1)
    st3, cek = rest(f"/wp-json/wp/v2/posts/{x['id']}?context=edit&_fields=content")
    raw2 = cek.get("content", {}).get("raw", "") if isinstance(cek, dict) else ""
    masuk = TARGET in raw2 and len(raw2) > len(raw)
    hidup = halaman_live(p["slug"])
    print(f"  #{x['id']:>5} HTTP {st2} | tersimpan: {'ya' if masuk else 'TIDAK'} | "
          f"tampil di halaman: {'ya' if hidup is True else hidup}")
    log.append({"id": x["id"], "slug": p["slug"], "ok": bool(masuk and hidup is True),
                "link": p["link"], "tambah_char": len(raw2) - len(raw)})

json.dump(log, open(LOG, "w"), ensure_ascii=False, indent=1)
print(f"\n  berhasil: {sum(1 for l in log if l['ok'])}/{len(log)} → {LOG}")
