#!/usr/bin/env python3
"""TSC batch 3 — mengikuti playbook references/thin-content-expansion.md §6:
  • sisip sebelum <h2>FAQ</h2> (kalau ada) → <h2>Kesimpulan</h2> → tambah di akhir
  • JANGAN tambah blok FAQ/schema baru (TSC sudah punya dari plugin pemilik)
  • jangan mengarang fakta klinik; tanpa harga/jam/jadwal
  • salinan ke tsc_pemulihan/salinan_tipis/ sebelum menulis, tulis lewat REST JSON, baca ulang, cek live
  • sekalian perbaiki rujukan domain lama klinikdnisidoarjo.com
"""
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)

T = {}
T[9268] = """<h2>Cara menyiapkan pertanyaan sebelum konsultasi</h2>
<p>Pertanyaan yang rapi membuat konsultasi lebih berguna. Tulis dulu tiga hal: keluhan utama, sejak kapan muncul, dan apa yang sudah Anda coba. Setelah itu susun pertanyaan lanjutan seperti perkiraan lama perawatan, tanda yang perlu diwaspadai di rumah, dan kapan harus kontrol kembali. Bila keluhan berulang, catat pemicunya dari makanan, produk, atau siklus bulanan.</p>
<h2>Tanda keluhan kulit yang sebaiknya tidak ditunda</h2>
<p>Sebagian keluhan cukup diamati, sebagian perlu segera diperiksa. Periksakan lebih awal bila keluhan menyebar cepat dalam hitungan hari, disertai nyeri hebat atau demam, muncul lepuhan berisi cairan, luka yang tidak menutup, atau perubahan pada tahi lalat berupa warna dan bentuk yang tidak simetris. Untuk area kelamin, jangan menunggu sampai muncul nyeri; beberapa kondisi justru paling mudah ditangani pada tahap awal.</p>
<h2>Konsultasi daring atau tatap muka</h2>
<p>Konsultasi daring berguna untuk menilai keluhan ringan, memantau hasil perawatan, dan menjawab pertanyaan lanjutan. Namun untuk keluhan yang memerlukan pemeriksaan langsung seperti ruam luas, lesi kulit, atau keluhan kelamin, kunjungan tatap muka tetap diperlukan. Tanyakan ke klinik pilihan Anda apakah kedua jalur ini tersedia, dan pemeriksaan seperti apa yang dibutuhkan pada kondisi Anda.</p>
"""

T[1716] = """<h2>Cara menilai dokter kulit terdekat yang layak dipilih</h2>
<p>Jarak bukan satu-satunya pertimbangan. Yang pertama perlu dipastikan adalah siapa yang memeriksa: dokter spesialis kulit dan kelamin, atau petugas yang menjalankan tindakan. Ini terlihat dari cara kerjanya, bukan sekadar dari spanduk. Klinik yang dikerjakan dokter spesialis biasanya memulai dari anamnesis dan pemeriksaan, baru menetapkan tindakan.</p>
<p>Pertimbangan kedua adalah kejelasan penjelasan. Pasien berhak tahu diagnosis, alasan pemilihan tindakan, durasi pemulihan, dan alternatifnya. Pertimbangan ketiga adalah kesediaan klinik menjelaskan rincian sebelum Anda memutuskan, termasuk perkiraan jumlah kunjungan.</p>
<h2>Kapan keluhan kulit sebaiknya ke dokter</h2>
<p>Tidak semua keluhan kulit perlu segera ke dokter. Jerawat ringan yang muncul sesekali masih dapat dijaga dengan perawatan harian. Namun beberapa kondisi sebaiknya diperiksa: keluhan yang menetap lebih dari dua minggu, ruam yang menyebar, gatal yang mengganggu tidur, luka yang tidak menutup, serta keluhan yang muncul setelah memakai obat atau produk baru.</p>
<h2>Yang perlu disiapkan saat berkunjung</h2>
<p>Catat keluhan utama dan waktu kemunculannya, daftar produk atau obat yang pernah dipakai, serta riwayat alergi. Bila ada foto kondisi sebelumnya, bawa sebagai pembanding. Untuk area yang akan diperiksa, hindari riasan tebal dan jangan mencoba produk baru beberapa hari sebelumnya agar reaksi yang muncul tidak tertukar dengan keluhan aslinya.</p>
"""

T[1669] = """<h2>Keluhan kulit yang paling sering ditangani</h2>
<p>Dari pengalaman layanan dermatologi, keluhan yang paling banyak datang adalah jerawat dan bekasnya, kulit kusam dan pigmentasi, eksim serta dermatitis, alergi kulit, dan infeksi jamur. Sebagian pasien juga datang untuk kebutuhan estetika medis seperti perbaikan tekstur kulit dan pori-pori. Apa pun keluhannya, penanganan yang baik selalu dimulai dari pemeriksaan.</p>
<h2>Berapa lama penanganan biasanya berjalan</h2>
<p>Durasi berbeda untuk setiap keluhan. Infeksi jamur umumnya dievaluasi setelah dua sampai empat minggu pengobatan. Jerawat dinilai perkembangannya setelah enam sampai delapan minggu karena mengikuti siklus pergantian kulit. Keluhan pigmentasi sering memerlukan waktu lebih panjang dan pemakaian tabir surya yang disiplin. Perkiraan ini bersifat umum, dan dokter biasanya memberi jadwal evaluasi untuk kondisi Anda.</p>
<h2>Cara merawat hasil pengobatan di rumah</h2>
<p>Bersihkan kulit dengan pembersih lembut dua kali sehari, gunakan pelembap untuk menjaga lapisan pelindung, dan pakai tabir surya setiap hari. Hindari produk dengan scrub kasar selama masa pemulihan, terutama setelah tindakan seperti peeling atau laser. Selesaikan obat sesuai anjuran meski gejala membaik, karena menghentikannya terlalu cepat sering membuat keluhan kembali.</p>
"""

T[1744] = """<h2>Kenapa keluhan kelamin sebaiknya diperiksa dokter spesialis</h2>
<p>Keluhan di area kelamin sering tampak serupa padahal penyebabnya berbeda: bisa infeksi, reaksi iritasi, atau kondisi lain yang memerlukan pemeriksaan penunjang. Penanganan yang salah memperpanjang keluhan dan berisiko menularkannya ke pasangan. Karena itu pemeriksaan dilakukan oleh dokter spesialis kulit dan kelamin yang memang menangani bidang ini.</p>
<p>Selain menegakkan diagnosis, dokter juga menjelaskan cara pengobatan, pemantauan kekambuhan, dan langkah yang perlu dilakukan pasangan bila diperlukan.</p>
<h2>Kesalahan yang sering terjadi sebelum ke dokter</h2>
<ul>
<li>Mencoba obat dari apotek berulang kali tanpa diagnosis, sehingga keluhan tertutup sementara lalu kembali.</li>
<li>Menunda pemeriksaan karena malu, padahal penanganan lebih awal biasanya lebih sederhana.</li>
<li>Menghentikan pengobatan begitu gejala membaik, sehingga risiko kekambuhan meningkat.</li>
<li>Menganggap keluhan akan hilang sendiri, padahal sebagian kondisi menular perlu pengobatan tuntas.</li>
</ul>
<h2>Soal kerahasiaan dan persiapan kunjungan</h2>
<p>Kerahasiaan adalah hal wajar untuk ditanyakan sebelum Anda memutuskan klinik. Tanyakan bagaimana catatan pemeriksaan disimpan dan siapa yang memiliki akses ke data tersebut. Saat berkunjung, sampaikan kronologi keluhan secara terbuka kepada dokter — informasi yang lengkap membuat penanganan lebih tepat. Bila diperlukan, buat janji lebih dulu agar waktu konsultasi tidak terpotong.</p>
"""

T[1747] = """<h2>Sp.DVE: artinya apa dan bedanya dengan spesialis lain</h2>
<p>Sp.DVE adalah gelar spesialis dermatologi dan venereologi. Dokter dengan gelar ini menempuh pendidikan lanjutan untuk menangani penyakit kulit, rambut, kuku, dan penyakit menular seksual. Perbedaannya dengan perawatan kecantikan biasa terletak pada urutan kerja: pemeriksaan lebih dulu, diagnosis setelahnya, baru tindakan. Urutan ini yang menghindarkan pasien dari tindakan yang tidak sesuai kondisi kulitnya.</p>
<h2>Keluhan yang ditangani sehari-hari</h2>
<ul>
<li>Jerawat aktif maupun bekas jerawat, termasuk jaringan parut.</li>
<li>Eksim, dermatitis, dan alergi kulit yang berulang.</li>
<li>Infeksi kulit dan kelamin beserta pemantauan kekambuhannya.</li>
<li>Pigmentasi seperti flek dan noda akibat paparan sinar matahari.</li>
<li>Tindakan estetika medis untuk tekstur kulit dan kulit kusam.</li>
</ul>
<h2>Cara menyiapkan pertanyaan sebelum konsultasi</h2>
<p>Datang dengan pertanyaan yang spesifik membuat hasil konsultasi lebih berguna. Sebutkan tujuan Anda, misalnya ingin kulit lebih bersih atau ingin keluhan tidak kembali. Tanyakan durasi perawatan, tanda bahaya yang perlu diwaspadai, dan apa yang harus dilakukan bila keluhan tidak membaik. Bila Anda memiliki hasil pemeriksaan sebelumnya, bawa agar tidak perlu memulai dari awal.</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}
        except Exception:
            time.sleep(4)
    return {}


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


print("=== rencana (ikuti urutan playbook) ===")
for pid, tamb in T.items():
    d = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,slug,content")
    raw = d.get("content", {}).get("raw", "")
    faq = re.search(r"<h2[^>]*>\s*FAQ\s*</h2>", raw, re.I)
    kes = re.search(r"<h2[^>]*>\s*Kesimpulan\s*</h2>", raw, re.I)
    punya_schema = "FAQPage" in raw
    domain_lama = raw.count("klinikdnisidoarjo.com")
    print(f"   #{pid} /{d.get('slug','?')[:42]:<44} {hitung(raw):>4} → {hitung(raw) + hitung(tamb):>4} kata | "
          f"sisip: {'FAQ' if faq else ('Kesimpulan' if kes else 'akhir')} | FAQPage sudah ada: {punya_schema} | domain lama: {domain_lama}")

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

print("\n=== menulis ===")
for pid, tamb in T.items():
    d = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,slug,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)
              or re.search(r"<h2[^>]*>\s*Kesimpulan\s*</h2>", raw, re.I))
    baru = (raw[:anchor.start()] + tamb + "\n" + raw[anchor.start():]) if anchor else (raw + "\n" + tamb)
    # rapikan rujukan domain lama
    n_domain = baru.count("klinikdnisidoarjo.com")
    baru = baru.replace("https://klinikdnisidoarjo.com", "https://www.theskincodeclinic.com")
    baru = baru.replace("klinikdnisidoarjo.com", "theskincodeclinic.com")
    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} /{d['slug'][:38]:<40} → {hitung(raw2):>4} kata | {'✅' if raw2 == baru else '⚠️ berbeda'}"
          + (f" | domain lama diperbaiki: {n_domain}" if n_domain else ""))

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