#!/usr/bin/env python3
"""TSC batch 6 — 5 artikel:
  • #1905 & #1936: bersihkan klaim (persentase, harga, rating, sertifikasi, 'permanen') lewat penggantian tepat
  • #9057, #1861, #1765: tambah bagian baru + FAQ + schema (belum punya)
  • sekalian: rujukan domain lama -> theskincodeclinic.com
Jalankan --apply untuk menulis."""
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)

# ── penggantian klaim (tepat per frasa)
REPL = {
 1905: [
  ("agar dapatkan perawatan aman dan hasil permanen", "agar perawatan yang Anda terima bisa dinilai perkembangannya"),
  ("Klinik terpercaya punya  dokter spesialis kulit dan kelamin (SpKK) atau dermatovenerology (Sp.DVE).",
   "Klinik terpercaya ditangani dokter spesialis kulit dan kelamin bergelar Sp.DVE (dermatologi dan venereologi)."),
  ("Klinik terpercaya punya dokter spesialis kulit dan kelamin (SpKK) atau dermatovenerology (Sp.DVE).",
   "Klinik terpercaya ditangani dokter spesialis kulit dan kelamin bergelar Sp.DVE (dermatologi dan venereologi)."),
  ("Klinik terpercaya punya 100+ testimoni positif.", "Klinik terpercaya bersedia menunjukkan cara pasien menilai layanannya."),
  ("The Skin Code Clinic Krian capai rating 4.9/5 dari ribuan pasien.", "Ulasan pasien The Skin Code Clinic Krian bisa dibaca sendiri di profil Google klinik."),
  ("Klinik dokter kulit Krian pajang semua dokumen.", "Dokumen perizinan klinik wajar ditanyakan dan sebaiknya bisa ditunjukkan."),
  ("audit rutin, nol kasus malpractice", "menjalankan alur layanan sesuai standar medis"),
  ("Sertifikat lengkap dari Kemenkes, BPOM produk, Halal MUI.", "Izin operasional klinik dan izin praktik dokter adalah hal yang wajar diminta pasien."),
  ("jadi pilihan klinik dokter kulit Krian nomor satu. Sehingga ribuan pasien puas, kulit mulus permanen tanpa risiko.",
   "sehingga memenuhi kriteria yang bisa Anda periksa sendiri sebelum memutuskan."),
  ("Hindari diskon 70% mencurigakan yang jebak kontrak panjang.", "Waspadai diskon besar yang menekan Anda langsung menandatangani kontrak panjang."),
  ("pantau terus website klinikdnisidoarjo.com", "pantau terus website resmi klinik"),
  ("SpKK atau Sp.DVE", "Sp.DVE"),
 ],
 1936: [
  ("Hasilnya, 90% pasien tidak kambuh dalam enam bulan pertama.",
   "Sebagian besar keluhan membaik bila pengobatan dijalankan sesuai anjuran dan pemicunya dihindari; kekambuhan umumnya berkaitan dengan pemicu yang belum tertangani."),
  ("Tahukah Anda, 20% anak mengalami eksim sebelum usia lima tahun?",
   "Eksim termasuk keluhan kulit yang cukup sering pada anak, dan umumnya mulai muncul sebelum usia lima tahun."),
  ("Harga Terjangkau: Mulai Rp150.000 untuk konsultasi dokter spesialis kulit dan kelamin anak.",
   "Biaya: rincian biaya konsultasi dan tindakan dijelaskan sebelum tindakan dilakukan."),
  ("Program Pencegahan: Workshop gratis bulanan tentang kulit seh",
   "Edukasi Orang Tua: bimbingan perawatan harian untuk menekan kekambuhan pada kulit se"),
 ],
}

# ── bagian baru
T = {}
T[1936] = """<h2>Kapan keluhan kulit anak perlu diperiksa dokter</h2>
<p>Tidak semua ruam pada anak perlu segera dibawa ke dokter. Namun beberapa kondisi sebaiknya diperiksa: ruam yang menyebar cepat, disertai demam atau lepuhan, keluhan yang menetap lebih dari dua minggu, gatal yang mengganggu tidur, luka yang tidak menutup, serta keluhan yang muncul setelah memakai produk baru pada kulit anak.</p>
<h2>Cara merawat kulit anak di rumah</h2>
<p>Pilih pembersih yang lembut tanpa pewangi, mandikan dengan air hangat, lalu oleskan pelembap segera setelah kulit dikeringkan. Hindari menggosok kulit dengan handuk kasar atau memakai scrub. Untuk eksim, pelembap yang digunakan rutin biasanya lebih membantu daripada mengganti produk berkali-kali.</p>
<p>Jaga juga pemicunya: bahan pakaian yang kasar, keringat yang menempel lama, dan suhu ruangan yang terlalu panas sering membuat keluhan bertambah. Bila keluhan berulang pada makanan tertentu, catat dan diskusikan dengan dokter sebelum menghapus asupan dari menu anak.</p>
"""

T[9057] = """<h2>Cara memastikan dokter yang Anda pilih memang spesialis</h2>
<p>Gelar yang perlu dicari adalah Sp.DVE, yaitu spesialis dermatologi dan venereologi. Selain gelar, perhatikan cara kerjanya: praktik yang baik memulai dari anamnesis dan pemeriksaan, lalu menetapkan tindakan sesuai diagnosis. Informasi izin praktik juga wajar ditanyakan dan seharusnya bisa ditunjukkan oleh klinik.</p>
<h2>Pertanyaan yang layak diajukan sebelum tindakan</h2>
<p>Sebelum menyetujui tindakan, tanyakan diagnosisnya, apakah ada pilihan selain tindakan tersebut, apa risikonya untuk jenis kulit Anda, bagaimana perawatan setelah tindakan, dan kapan hasilnya dievaluasi. Dokter yang baik tidak keberatan menjawab kelimanya, karena keputusan tetap di tangan pasien.</p>
<h2>Kapan sebaiknya meminta pendapat kedua</h2>
<p>Pendapat kedua masuk akal bila keluhan tidak membaik setelah perawatan dijalankan sesuai anjuran, bila usulan tindakan terlalu banyak sekaligus, atau bila penjelasan yang Anda terima terlalu singkat untuk memutuskan. Ini bagian dari keputusan medis yang wajar.</p>
"""

T[1861] = """<h2>Keluhan yang paling sering dikonsultasikan</h2>
<p>Keluhan yang paling banyak datang adalah jerawat dan bekasnya, eksim serta dermatitis, alergi kulit, infeksi jamur, dan pigmentasi. Sebagian pasien datang untuk keluhan kelamin, sebagian lagi untuk kebutuhan estetika medis seperti perbaikan tekstur kulit. Apa pun keluhannya, konsultasi 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, sedangkan jerawat dinilai perkembangannya setelah enam sampai delapan minggu karena mengikuti siklus pergantian kulit. Keluhan pigmentasi sering memerlukan waktu lebih panjang.</p>
<h2>Perawatan setelah konsultasi</h2>
<p>Hasil konsultasi berguna jika dijalankan. Gunakan pembersih lembut dua kali sehari, pelembap untuk menjaga lapisan pelindung kulit, dan tabir surya setiap hari. Hindari produk dengan scrub kasar selama masa pemulihan, dan selesaikan obat sesuai anjuran meski gejala sudah membaik.</p>
"""

T[1765] = """<h2>Keluhan yang kerap ditangani</h2>
<p>Keluhan kulit yang paling sering datang adalah jerawat dan bekasnya, eksim, alergi kulit, infeksi jamur, dan pigmentasi. Dari sisi kelamin, penanganan mencakup keluhan menular maupun yang disebabkan iritasi, dengan pemeriksaan yang menjaga kerahasiaan pasien. Keluhan seperti ini sebaiknya tidak ditangani sendiri tanpa diagnosis.</p>
<h2>Kapan sebaiknya diperiksa dokter</h2>
<p>Periksakan bila keluhan menetap lebih dari dua minggu, menyebar, terasa nyeri atau panas, muncul lepuhan atau luka terbuka, atau muncul setelah memakai obat dan produk baru. Untuk keluhan kelamin, jangan menunggu sampai terasa nyeri karena beberapa kondisi lebih mudah ditangani pada tahap awal.</p>
<h2>Menyiapkan kunjungan pertama</h2>
<p>Catat keluhan utama dan waktu kemunculannya, bawa daftar produk atau obat yang pernah dipakai, dan sebutkan riwayat alergi. Bila ada hasil pemeriksaan sebelumnya, bawa sebagai bahan pertimbangan. Membuat janji lebih dulu membuat waktu konsultasi tidak terpotong antrean.</p>
"""

F = {}
F[1936] = [
 ("Kapan ruam pada anak perlu segera diperiksa?",
  "Bila ruam menyebar cepat, disertai demam atau lepuhan, menetap lebih dari dua minggu, mengganggu tidur anak, atau muncul setelah pemakaian produk baru. Untuk kondisi seperti ini, pemeriksaan dokter lebih aman daripada mencoba produk lain."),
 ("Apakah eksim pada anak bisa sembuh?",
  "Banyak anak membaik seiring bertambahnya usia, terutama bila pemicunya dikelola. Perawatan bertujuan menekan peradangan, menjaga kelembapan kulit, dan mengurangi kekambuhan, bukan menjanjikan hilang permanen."),
 ("Bolehkah memakai produk orang dewasa untuk kulit anak?",
  "Sebaiknya tidak. Kulit anak lebih tipis dan lebih mudah teriritasi. Gunakan pembersih dan pelembap yang diformulasikan untuk anak, tanpa pewangi, dan hindari produk dengan bahan aktif keras tanpa anjuran dokter."),
 ("Apakah keluhan kulit anak bisa ditangani tanpa tindakan?",
  "Sering kali ya. Banyak keluhan anak cukup ditangani dengan obat topikal dan penyesuaian perawatan harian. Tindakan medis diberikan bila indikasinya jelas setelah pemeriksaan."),
 ("Apa yang perlu disiapkan saat berkonsultasi?",
  "Catatan keluhan dan waktu kemunculannya, daftar produk yang pernah dipakai, riwayat alergi keluarga, serta foto kondisi sebelumnya bila ada. Informasi ini membantu dokter menilai pemicu dan menentukan penanganan."),
]
F[9057] = [
 ("Apa gelar yang menandakan dokter spesialis kulit dan kelamin?",
  "Sp.DVE, singkatan dari spesialis dermatologi dan venereologi. Gelar ini menandakan pendidikan spesialis lanjutan untuk menangani penyakit kulit, rambut, kuku, dan penyakit menular seksual."),
 ("Apakah dokter umum bisa menangani keluhan kulit?",
  "Bisa untuk keluhan sederhana. Namun bila keluhan menetap, berulang, atau memerlukan tindakan seperti peeling dan laser, penanganan sebaiknya oleh dokter spesialis agar diagnosisnya tepat."),
 ("Bagaimana menilai apakah kliniknya kredibel?",
  "Periksa siapa yang memeriksa, apakah tindakan didahului diagnosis, dan apakah rincian biaya dijelaskan sebelum tindakan. Izin operasional klinik dan izin praktik dokter juga wajar diminta."),
 ("Apakah konsultasi pertama langsung tindakan?",
  "Tidak selalu. Kunjungan pertama umumnya dipakai untuk menegakkan diagnosis dan menyusun rencana perawatan. Tindakan dijadwalkan setelah diagnosis jelas dan Anda menyetujui rencananya."),
 ("Kapan sebaiknya meminta pendapat kedua?",
  "Bila keluhan tidak membaik setelah perawatan dijalankan sesuai anjuran, bila usulan tindakan terlalu banyak sekaligus, atau bila penjelasan yang diterima belum cukup untuk memutuskan."),
]
F[1861] = [
 ("Apa yang diperiksa saat konsultasi kulit pertama?",
  "Dokter menanyakan keluhan, waktu kemunculannya, produk yang pernah dipakai, dan riwayat alergi, lalu memeriksa kulit secara langsung. Bila perlu, dilakukan pemeriksaan penunjang sederhana seperti kerokan kulit untuk infeksi jamur."),
 ("Apakah konsultasi harus berakhir dengan tindakan?",
  "Tidak. Konsultasi dapat berhenti pada diagnosis dan rencana perawatan, misalnya dengan obat serta penyesuaian perawatan harian. Tindakan diberikan bila memang diperlukan."),
 ("Berapa lama hasil perawatan mulai terlihat?",
  "Bergantung keluhannya. Infeksi jamur dievaluasi dalam dua sampai empat minggu, jerawat dalam enam sampai delapan minggu, sedangkan pigmentasi sering lebih lama dan memerlukan kedisiplinan memakai tabir surya."),
 ("Keluhan apa saja yang bisa dikonsultasikan?",
  "Jerawat dan bekasnya, eksim, dermatitis, alergi kulit, infeksi jamur, keluhan pigmentasi, keluhan rambut dan kuku, keluhan kelamin, serta tindakan estetika medis bila indikasinya sesuai."),
 ("Apa yang perlu disiapkan sebelum datang?",
  "Catatan keluhan dan waktunya, daftar produk atau obat yang pernah dipakai, riwayat alergi, dan foto kondisi sebelumnya bila ada. Hindari riasan tebal pada area yang akan diperiksa."),
]
F[1765] = [
 ("Apa saja keluhan kulit dan kelamin yang ditangani?",
  "Jerawat dan bekasnya, eksim, dermatitis, alergi kulit, infeksi jamur, pigmentasi, keluhan rambut dan kuku, serta keluhan pada area kelamin. Tindakan estetika medis juga tersedia bila indikasinya sesuai."),
 ("Apakah konsultasi kelamin dijamin kerahasiaannya?",
  "Kerahasiaan adalah bagian dari standar layanan dan wajar ditanyakan. Sebelum memutuskan, tanyakan bagaimana catatan pemeriksaan disimpan dan siapa yang memiliki akses ke data tersebut."),
 ("Apakah praktiknya dipimpin dokter spesialis?",
  "Praktik yang baik dipimpin dokter spesialis kulit dan kelamin bergelar Sp.DVE, dengan alur pemeriksaan lebih dulu sebelum tindakan. Hal ini wajar ditanyakan saat membuat janji."),
 ("Berapa lama penanganan biasanya berjalan?",
  "Bervariasi. Sebagian keluhan membaik dalam dua sampai empat minggu, sebagian memerlukan evaluasi berkala. Dokter akan menjelaskan perkiraan waktu untuk kondisi Anda."),
 ("Bagaimana cara membuat janji konsultasi?",
  "Hubungi kontak resmi klinik dan sebutkan keluhan utama Anda. Membuat janji lebih dulu membuat waktu tunggu lebih singkat dan sesi konsultasi lebih optimal."),
]


def blok_faq(pairs):
    h = ["<h2>FAQ</h2>"]
    for q, a in pairs:
        h.append(f"<h3>{q}</h3><p>{a}</p>")
    skema = {"@context": "https://schema.org", "@type": "FAQPage",
             "mainEntity": [{"@type": "Question", "name": q, "acceptedAnswer": {"@type": "Answer", "text": a}}
                            for q, a in pairs]}
    return "\n".join(h) + '\n<script type="application/ld+json">\n' + json.dumps(skema, ensure_ascii=False, indent=1) + "</script>\n"


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])


PIDS = [1905, 1936, 9057, 1861, 1765]
print("=== rencana ===")
for pid in PIDS:
    d = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,slug,content")
    raw = d.get("content", {}).get("raw", "")
    faq = bool(re.search(r"<h2[^>]*>\s*FAQ\s*</h2>", raw, re.I)) or "FAQPage" in raw
    tamb = T.get(pid, "") + ("" if faq else (blok_faq(F[pid]) if pid in F else ""))
    n_repl = sum(1 for lama, _ in REPL.get(pid, []) if lama in raw)
    print(f"   #{pid} /{d.get('slug','?')[:38]:<40} {hitung(raw):>4} → {hitung(raw) + hitung(tamb):>4} kata | "
          f"penggantian klaim yang cocok: {n_repl}/{len(REPL.get(pid, []))} | FAQ: {'ada' if faq else 'ditambah'}")

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

print("\n=== menulis ===")
for pid in PIDS:
    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)
    baru = raw
    n_ganti = 0
    for lama, gant in REPL.get(pid, []):
        if lama in baru:
            baru = baru.replace(lama, gant); n_ganti += 1
    faq = bool(re.search(r"<h2[^>]*>\s*FAQ\s*</h2>", baru, re.I)) or "FAQPage" in baru
    if pid in T:
        anchor = (re.search(r"<h2[^>]*>\s*FAQ\s*</h2>", baru, re.I) or re.search(r"<h2[^>]*>\s*Kesimpulan\s*</h2>", baru, re.I))
        sisip = T[pid] + ("" if faq else (blok_faq(F[pid]) if pid in F else ""))
        baru = (baru[:anchor.start()] + sisip + "\n" + baru[anchor.start():]) if anchor else (baru.rstrip() + "\n" + sisip)
    n_dom = baru.count("klinikdnisidoarjo.com")
    baru = baru.replace("klinikdnisidoarjo.com", "theskincodeclinic.com")
    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 ""
    sisa = sorted({k.lower() for k in re.findall(r"permanen|tanpa risiko|Rp\d|4\.9/5|garansi|refund|BPOM|Halal MUI|SpKK", raw2)})
    print(f"   #{pid} /{d['slug'][:32]:<34} → {hitung(raw2):>4} kata | klaim diganti: {n_ganti} | FAQPage: {'ada' if 'FAQPage' in raw2 else 'tidak'} | "
          f"domain lama: {n_dom} | sisa klaim: {sisa if sisa else 'bersih'} | re-read: {'✅' if raw2 == baru else '⚠️'}")

print("\n=== verifikasi live ===")
time.sleep(3)
for pid in PIDS:
    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', '')[:44]:<46} FAQPage: {hh.count('FAQPage')} | "
              f"sisa klaim: {[p for p in ('Rp150','4.9/5','90%','BPOM') if p.lower() in hh.lower()] or 'bersih'} | {t.group(1).strip()[:34] if t else '-'}")
    except Exception as e:
        print(f"   {url}: gagal {str(e)[:40]}")
