#!/usr/bin/env python3
"""TSC: perpanjang 2 artikel tipis dengan bagian BARU sebelum FAQ (isi lama tidak diubah).
Salinan dulu, lalu tulis lewat REST, lalu verifikasi panjang & tampilan live."""
import base64, html, json, os, re, sys, time, urllib.request, urllib.error, importlib.util

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
spec = importlib.util.spec_from_file_location("cfg_tsc", f"{WS}/cfg_tsc.py")
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
DOM, USER, PASS = m.CFG["domain"], m.CFG["user"], m.CFG["pass"]
AUTH = base64.b64encode(f"{USER}:{PASS}".encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}
BACKUP = f"{WS}/tsc_pemulihan/salinan_tipis"
os.makedirs(BACKUP, exist_ok=True)

TAMBAHAN = {}

TAMBAHAN[9266] = """<h2>Apa yang diperiksa pada konsultasi pertama</h2>
<p>Konsultasi di dokter spesialis kulit tidak dimulai dari tindakan, melainkan dari pertanyaan. Dokter menanyakan sejak kapan keluhan muncul, apa yang membuatnya bertambah berat, produk atau obat apa yang sudah dipakai, serta riwayat alergi dan riwayat keluarga. Untuk keluhan tertentu, pertanyaannya berlanjut ke kebiasaan harian: pembersih wajah, pelembap, tabir surya, sampai pola makan dan tidur.</p>
<p>Setelah itu dilakukan pemeriksaan langsung pada kulit. Dokter memperhatikan bentuk, lokasi, warna, dan sebaran keluhannya. Dari situ disusun dugaan diagnosis, lalu dipastikan dengan pemeriksaan penunjang bila memang diperlukan, misalnya kerokan kulit untuk infeksi jamur, pemeriksaan lampu khusus, atau tes alergi. Tidak semua keluhan memerlukan pemeriksaan tambahan.</p>
<p>Hasilnya berupa rencana penanganan yang memuat tiga hal: diagnosis, tindakan atau obat yang dipilih, dan jadwal evaluasi. Pasien yang memahami ketiga hal ini biasanya lebih mudah menilai apakah perawatannya berjalan sesuai harapan.</p>
<h2>Bedanya dokter spesialis kulit dan perawatan estetik biasa</h2>
<p>Perawatan estetik di tempat yang tidak diawasi dokter umumnya langsung menawarkan tindakan: facial, peeling, atau laser, tanpa pemeriksaan lebih dulu. Untuk kulit sehat, hal itu mungkin tidak menimbulkan masalah. Namun pada kulit yang sedang meradang, berjerawat aktif, atau terinfeksi, tindakan yang dipilih tanpa diagnosis justru bisa memperburuk kondisi.</p>
<p>Dokter spesialis kulit dan kelamin menempuh pendidikan lanjutan khusus untuk mengenali penyakit kulit dan kelamin, termasuk yang jarang ditemui. Karena itu urutan kerjanya berbeda: diagnosis lebih dulu, tindakan kemudian. Tindakan tetap bisa dilakukan, tetapi pilihannya disesuaikan dengan kondisi kulit pasien pada saat itu.</p>
<h2>Kapan sebaiknya kontrol ulang</h2>
<p>Perawatan kulit jarang selesai dalam satu kunjungan. Dokter biasanya menetapkan jadwal kontrol untuk menilai apakah keluhan membaik, tetap, atau bertambah berat. Bila obat yang diberikan kurang memberi hasil, rencana perawatan disesuaikan.</p>
<p>Karena itu, jangan menunggu sampai obat habis untuk kembali berkonsultasi apabila muncul keluhan baru seperti kulit terasa perih, kemerahan yang meluas, atau bengkak.</p>
"""

TAMBAHAN[1675] = """<h2>Berapa lama penanganan biasanya berjalan</h2>
<p>Durasi penanganan bergantung pada jenis keluhannya. Infeksi jamur pada kulit umumnya dievaluasi setelah dua sampai empat minggu pengobatan. Jerawat biasanya dinilai perkembangannya setelah enam sampai delapan minggu, karena pergantian siklus kulit memerlukan waktu. Sebaliknya, keluhan kelamin tertentu punya jadwal pemeriksaan dan pengobatan yang lebih ketat, dan itu dijelaskan dokter saat konsultasi.</p>
<p>Estimasi ini bersifat umum. Faktor yang mempercepat atau memperlambat antara lain tingkat keparahan, kepatuhan memakai obat, kondisi kulit, serta penyakit penyerta seperti diabetes. Kalau Anda ragu menilai apakah perawatannya berjalan, catat perubahan yang Anda lihat dan bawa catatan itu saat kontrol.</p>
<h2>Kesalahan yang sering terjadi sebelum ke dokter</h2>
<p>Beberapa kebiasaan berikut membuat penanganan menjadi lebih rumit.</p>
<ul>
<li>Mengoles krim keras atau produk yang tidak jelas asalnya, sehingga keluhan asli tertutup oleh iritasi baru.</li>
<li>Membeli obat bebas berulang kali, terutama yang mengandung kortikosteroid, lalu dipakai jangka panjang tanpa pengawasan.</li>
<li>Menggaruk atau memencet lesi, yang bisa menimbulkan infeksi sekunder dan bekas.</li>
<li>Menunda pemeriksaan karena malu, padahal keluhan kelamin justru lebih mudah ditangani bila diperiksa lebih awal.</li>
</ul>
<p>Semua itu bisa dihindari dengan satu langkah: periksa lebih dulu, obati kemudian. Konsultasi tidak mengharuskan Anda langsung menjalani tindakan; banyak keluhan cukup ditangani dengan obat dan penyesuaian perawatan harian.</p>
<h2>Merawat hasil pengobatan di rumah</h2>
<p>Hasil pengobatan di klinik bertahan lebih lama bila perawatan harian ikut dijaga. Bersihkan kulit dengan pembersih lembut dua kali sehari, gunakan pelembap untuk menjaga lapisan pelindung kulit, dan pakai tabir surya setiap hari, terutama setelah tindakan seperti peeling atau laser. Hindari produk dengan scrub kasar selama kulit dalam masa pemulihan.</p>
<p>Untuk keluhan menular seperti infeksi jamur, selesaikan obat sesuai anjuran meskipun gejala sudah membaik. Risiko kekambuhan menurun bila pengobatan tidak dihentikan terlalu cepat dan bila barang pribadi seperti handuk tidak dipakai bergantian.</p>
"""


def rest(p, 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(f"https://{DOM}{p}", data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return json.loads(x.read())
        except urllib.error.HTTPError as e:
            return {"__err": e.code, "pesan": e.read().decode()[:150]}
        except Exception:
            time.sleep(4)
    return {}


def hitung(teks_html):
    t = html.unescape(re.sub(r"<[^>]+>", " ", re.sub(r"<script.*?</script>", " ", teks_html, flags=re.S)))
    return len([w for w in re.split(r"\s+", t) if w])


print("=== rencana ===")
for pid, tambahan in TAMBAHAN.items():
    d = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,slug,link,content")
    raw = d["content"]["raw"]
    print(f"   #{pid} /{d['slug'][:44]:<46} {hitung(raw):>4} kata → +{hitung(tambahan)} kata = {hitung(raw) + hitung(tambahan)} kata")
    anchor = re.search(r"<h2[^>]*>\s*FAQ\s*</h2>", raw, re.I)
    print(f"      titik sisip (sebelum FAQ): {'ditemukan' if anchor else 'TIDAK ADA'}")

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

print("\n=== menulis ===")
for pid, tambahan in TAMBAHAN.items():
    d = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,slug,link,content")
    raw = d["content"]["raw"]
    open(f"{BACKUP}/post_{pid}.txt", "w").write(raw)
    anchor = re.search(r"<h2[^>]*>\s*FAQ\s*</h2>", raw, re.I)
    if anchor:
        baru = raw[:anchor.start()] + tambahan + "\n" + raw[anchor.start():]
    else:
        baru = raw + "\n" + tambahan
    st, _ = (0, None) if False else (None, None)
    res = rest(f"/wp-json/wp/v2/posts/{pid}", "POST", {"content": baru})
    cek = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content")
    raw2 = cek.get("content", {}).get("raw", "") if isinstance(cek, dict) else ""
    print(f"   #{pid} → {hitung(raw2)} kata | sama dengan yang dikirim: {'YA' if raw2 == baru else 'tidak'}")

print("\n=== verifikasi live ===")
time.sleep(3)
for pid in TAMBAHAN:
    d = rest(f"/wp-json/wp/v2/posts/{pid}?_fields=link,slug")
    url = d.get("link", "")
    try:
        h = urllib.request.urlopen(urllib.request.Request(url + f"?v={int(time.time())}", headers=UA), timeout=90).read().decode("utf-8", "replace")
        t = re.search(r"<title>(.*?)</title>", h, re.S)
        print(f"   {url.replace('https://www.theskincodeclinic.com', '')[:46]:<48} {hitung(h)} kata di halaman | judul: {t.group(1).strip()[:46] if t else '-'}")
    except Exception as e:
        print(f"   {url}: gagal {str(e)[:50]}")
