#!/usr/bin/env python3
"""TSC — pasang noindex (Yoast) ke halaman kembar lewat XML-RPC, dengan mengirim ulang seluruh custom field.

REST tidak menerima meta Yoast untuk TSC, jadi jalur XML-RPC. Penting: wp.editPost menimpa SELURUH
custom field, jadi daftar lama dibaca dulu lalu dikirim ulang lengkap.

Pakai --go untuk menulis.
"""
import base64, importlib.util, json, os, re, sys, time, urllib.error, urllib.request
import xmlrpc.client

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
BACKUP = f"{WS}/tsc_backup_rapi"
os.makedirs(BACKUP, exist_ok=True)
spec = importlib.util.spec_from_file_location("cfg", f"{WS}/cfg_tsc.py")
m = importlib.util.module_from_spec(spec)
spec.loader.exec_module(m)
CFG = m.CFG
DOM = CFG["domain"]
USER, SANDI = CFG["user"], CFG["pass"]
KUNCI = "_yoast_wpseo_meta-robots-noindex"
PIDS = [8831, 9053, 9057, 9069, 8858, 2014, 9061, 9100, 9051, 9093, 1633, 1569]

proxy = xmlrpc.client.ServerProxy(f"https://www.{DOM}/xmlrpc.php", allow_none=True)

print("cek XML-RPC...")
try:
    info = proxy.wp.getOptions(0, USER, SANDI)
    print(f"   tersambung · software: {info.get('software_name')} {info.get('software_version')}")
except Exception as e:
    sys.exit(f"   gagal: {str(e)[:120]}")

go = "--go" in sys.argv
# kalau ada id yang disebut setelah --go, kerjakan hanya id itu (untuk uji dulu)
khusus = [int(x) for x in sys.argv[sys.argv.index("--go") + 1:] if x.isdigit()] if go else []
if khusus:
    PIDS = khusus
    print(f"uji satu halaman: {PIDS}")
for pid in PIDS:
    try:
        p = proxy.wp.getPost(0, USER, SANDI, pid)
    except Exception as e:
        print(f"   #{pid} gagal baca: {str(e)[:60]}")
        continue
    cf = p.get("custom_fields", [])
    lama = next((x for x in cf if x.get("key") == KUNCI), None)
    judul = re.sub(r"<[^>]+>", "", str(p.get("title", "")))[:52]
    print(f"   #{pid} «{judul}» · field {len(cf)} · noindex sekarang: {lama.get('value') if lama else '(tidak ada)'}")
    if not go:
        continue
    baru = [x for x in cf if x.get("key") != KUNCI]
    baru.append({"key": KUNCI, "value": "1"})
    try:
        proxy.wp.editPost(0, USER, SANDI, pid, {"custom_fields": baru})
        time.sleep(1)
        p2 = proxy.wp.getPost(0, USER, SANDI, pid)
        v = next((x.get("value") for x in p2.get("custom_fields", []) if x.get("key") == KUNCI), None)
        print(f"        → tersimpan: {v}")
    except Exception as e:
        print(f"        → gagal tulis: {str(e)[:90]}")
    time.sleep(0.5)

if not go:
    print("\n(dry run — pakai --go)")
