#!/usr/bin/env python3
"""Perkuat klaster PRP TSC: tautan masuk dari artikel terkait + tautan keluar dari artikel PRP yang kosong.

Jalankan tanpa argumen = uji. Dengan --go = pasang.
"""
import base64, importlib.util, json, re, sys, time, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
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)
S = "https://www.theskincodeclinic.com"
A = base64.b64encode(f"{m.CFG['user']}:{m.CFG['pass']}".encode()).decode()
H = {"Authorization": f"Basic {A}", "User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}

PRP_JERAWAT = S + "/prp-wajah-di-krian-solusi-bekas-jerawat-dan-bopeng-yang-susah-hilang/"
PRP_ANTIAGING = S + "/7-manfaat-prp-untuk-anti-aging-dan-kulit-glowing-di-the-skin-code-clinic/"
PRP_RAMBUT = S + "/prp-untuk-rambut-rontok-di-the-skin-code-clinic-6-manfaat-yang-perlu-diketahui/"


def a(u, t):
    return f'<a href="{u}">{t}</a>'


SISIPAN = {
    # tautan masuk: artikel terkait → halaman PRP
    9257: f"""<p>Selain microneedling, bekas jerawat yang sudah membentuk lekukan bisa dibantu dengan {a(PRP_JERAWAT, 'PRP untuk bekas jerawat dan bopeng')}.</p>""",
    9251: f"""<p>Untuk bekas jerawat yang sudah berupa cekungan, pilihan tindakannya dibahas di {a(PRP_JERAWAT, 'PRP wajah untuk bekas jerawat dan bopeng')}.</p>""",
    8843: f"""<p>Kombinasi microneedling dengan {a(PRP_JERAWAT, 'PRP untuk bekas jerawat')} sering dipilih untuk hasil yang lebih merata.</p>""",
    9067: f"""<p>Salah satu tindakan yang masuk kategori ini adalah {a(PRP_ANTIAGING, 'PRP untuk anti-aging dan kulit glowing')}, yang memakai plasma dari darah Anda sendiri.</p>""",
    8852: f"""<p>Selain tindakan berbasis alat, ada juga pilihan yang memakai plasma darah sendiri, yaitu {a(PRP_ANTIAGING, 'PRP untuk anti-aging')}.</p>""",
    1581: f"""<p>Satu di antaranya adalah {a(PRP_ANTIAGING, 'PRP untuk kulit glowing')}, yang memanfaatkan plasma dari darah pasien sendiri.</p>""",
    # #1927 belum diindeks dan belum punya tautan keluar
    1927: f"""<p>Untuk melihat layanan, jadwal praktik, dan lokasi kliniknya, buka {a(S + '/', 'The Skin Code Clinic Krian Sidoarjo')}. Tindakan PRP untuk masalah lain dibahas di {a(PRP_JERAWAT, 'PRP bekas jerawat dan bopeng')} serta {a(PRP_RAMBUT, 'PRP untuk rambut rontok')}.</p>""",
    1924: f"""<p>Jadwal dan layanan lengkapnya ada di {a(S + '/', 'klinik kulit dan kelamin Krian Sidoarjo')}; pemakaian PRP untuk wajah dibahas di {a(PRP_JERAWAT, 'PRP bekas jerawat')}.</p>""",
    1930: f"""<p>Layanan dan jadwal praktiknya bisa dilihat di {a(S + '/', 'The Skin Code Clinic')}; pemakaian PRP untuk rambut rontok ada di {a(PRP_RAMBUT, 'PRP rambut rontok')}.</p>""",
}


def ambil(pid):
    u = f"{S}/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,content,link"
    return json.loads(urllib.request.urlopen(urllib.request.Request(u, headers=H), timeout=90).read())


def kirim(pid, isi):
    b = json.dumps({"content": isi}).encode()
    return urllib.request.urlopen(urllib.request.Request(f"{S}/wp-json/wp/v2/posts/{pid}", data=b,
                                                         headers=H, method="POST"), timeout=120).status


GO = "--go" in sys.argv
cadangan, jumlah = {}, 0
for pid, tambahan in SISIPAN.items():
    x = ambil(pid)
    c = x["content"]["raw"]
    if tambahan[:70] in c:
        print(f"   #{pid} sudah ada, lewati")
        continue
    pos = c.find('<p style="text-align:center')
    if pos == -1:
        pos = len(c)
    baru = c[:pos] + tambahan + "\n" + c[pos:]
    print(f"   #{pid} · {x['link'].replace(S, '')[:54]:<56} +{len(re.findall('<a href', tambahan))} tautan")
    cadangan[str(pid)] = c
    jumlah += 1
    if GO:
        kirim(pid, baru)
        time.sleep(1)

if GO:
    json.dump(cadangan, open(f"{WS}/tsc_backup_tautan_prp.json", "w"), ensure_ascii=False)
    print(f"\n✅ {jumlah} artikel · cadangan: tsc_backup_tautan_prp.json")
else:
    print(f"\n(uji) {jumlah} artikel siap. Pakai --go untuk memasang.")
