#!/usr/bin/env python3
"""TSC — artikel harian: «Kapan Anak Perlu Diperiksa ke Dokter Kulit».

Topik dari tsc_topik_bank.json (entri ke-7, fokus «dokter kulit anak»). Sudah disaring
tsc_cek_topik.py: aman (skor tertinggi 0,29 ke #9249, di bawah ambang 0,30).
Alur: draf (REST) → gambar unggulan (desain sendiri, 1000x567 webp) → meta Yoast (XML-RPC,
kirim ulang seluruh custom field) → jadwalkan 2026-10-22 08:00 WIB (zona situs = UTC, jadi 01:00).

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

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)
CFG = m.CFG
DOM = CFG["domain"]
USER, SANDI = CFG["user"], CFG["pass"]
AUTH = base64.b64encode(f"{USER}:{SANDI}".encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}

JUDUL = "Kapan Anak Perlu Diperiksa ke Dokter Kulit"
SLUG = "kapan-anak-perlu-diperiksa-ke-dokter-kulit"
FOKUS = "dokter kulit anak"
META_JUDUL = "Kapan Anak Perlu Diperiksa ke Dokter Kulit"
META_DESC = ("Ruam, gatal, atau eksim pada anak yang tidak kunjung membaik sebaiknya diperiksa dokter "
             "kulit. Kenali tandanya dan cara merawat kulit anak di rumah.")
TANGGAL = "2026-10-22T01:00:00"   # 08:00 WIB (zona situs UTC)
GAMBAR = f"{WS}/tsc_feat_kapan-anak-perlu-diperiksa-ke-dokter-kulit.webp"
ALT_GAMBAR = JUDUL

WA = ("https://wa.me/6285117444417?text=Saya%20ingin%20konsultasi%20masalah%20kulit%20di%20The%20Skin%20Code%20Clinic")
TOMBOL = ('<p style="text-align:center;margin:32px 0 8px"><a class="wp-block-button__link wp-element-button" '
          'href="' + WA + '" target="_blank" rel="noopener" style="display:inline-block;background-color:#0f2557;'
          'color:#ffffff;padding:15px 34px;font-size:18px;font-weight:bold;text-decoration:none;border-radius:6px;">'
          'KONSULTASI GRATIS</a></p>')

ISI = """
<p>Anak Anda sudah beberapa hari menggaruk lengan dan punggungnya, kulitnya merah dan terasa kasar saat
disentuh. Krim yang biasa dipakai di rumah tidak banyak membantu, dan ruamnya justru meluas ke lipatan
leher. Situasi seperti ini sering membuat orang tua ragu, apakah cukup dirawat sendiri atau sudah
waktunya dibawa ke dokter.</p>

<p>Kulit anak memang lebih rentan, dan sebagian keluhannya tidak bisa diselesaikan dengan produk yang
dijual bebas. Bagian berikut menjelaskan apa yang membuat kulit anak berbeda, keluhan yang sering
muncul, tanda yang sebaiknya tidak ditunda, dan apa yang perlu Anda siapkan kalau memang harus
berkonsultasi ke dokter kulit anak.</p>

<h2>Kenapa Kulit Anak Perlu Penanganan yang Berbeda</h2>
<p>Kulit anak lebih tipis dibanding kulit orang dewasa. Lapisan pelindungnya belum terbentuk sempurna,
sehingga zat yang menempel di permukaan lebih mudah menembus dan memicu reaksi. Kandungan air di dalam
kulitnya lebih tinggi, tetapi kemampuan menahan air itu masih rendah, jadi kulit anak lebih cepat kering
dan mudah teriritasi.</p>

<p>Karena itu produk dan tindakan yang dipakai orang dewasa belum tentu cocok untuk anak. Bahan aktif
yang cukup aman di kulit dewasa bisa membuat kulit anak memerah, perih, atau justru memperberat ruam.
Sebaiknya pemeriksaan oleh dokter kulit didahulukan sebelum Anda mencoba berbagai produk sendiri di
rumah.</p>

<h2>Keluhan Kulit Anak yang Paling Sering Muncul</h2>
<p>Keluhan kulit termasuk penyebab kunjungan yang paling umum pada anak. Beberapa yang paling sering
ditemui di praktik sehari-hari sebagai berikut.</p>
<ul>
<li>Eksim atau dermatitis atopik, yang ditandai kulit kering, merah, dan gatal hebat, terutama di lipatan
siku, belakang lutut, dan pipi.</li>
<li>Biang keringat, muncul sebagai bintik kecil di leher, punggung, dan lipatan kulit saat cuaca panas
atau anak terlalu lama memakai pakaian tebal.</li>
<li>Ruam popok, akibat kulit yang terlalu lama bersentuhan dengan popok basah.</li>
<li>Infeksi jamur, misalnya panu atau kutu air, yang sering muncul di area lembap dan mudah menular di
lingkungan bermain.</li>
<li>Infeksi bakteri seperti impetigo, yang tampak sebagai luka berkerak kekuningan di sekitar hidung dan
mulut.</li>
<li>Biduran atau urtikaria, yaitu bentol yang muncul mendadak dan berpindah tempat.</li>
<li>Kutu kepala, yang membuat kulit kepala gatal dan kadang disertai luka garuk.</li>
</ul>
<p>Sebagian keluhan ini mirip satu dengan yang lain pada pandangan awam. Ruam akibat iritasi, alergi, dan
infeksi bisa terlihat hampir sama, padahal cara menanganinya berbeda. Memastikan penyebabnya lebih dulu
jauh lebih berguna daripada menebak sendiri.</p>

<h2>Tanda Anak Sebaiknya Segera Diperiksa Dokter Kulit</h2>
<p>Tidak setiap ruam perlu dibawa ke klinik. Namun ada beberapa keadaan yang sebaiknya tidak ditunggu
sampai berhari-hari.</p>
<ul>
<li>Ruam yang menyebar cepat atau disertai demam dan lemas.</li>
<li>Luka atau lecet yang tidak menutup setelah dua pekan.</li>
<li>Kulit bernanah, berkerak tebal, atau terasa hangat saat disentuh.</li>
<li>Gatal hebat yang mengganggu tidur dan membuat anak terus menggaruk.</li>
<li>Ruam yang membasah atau mengeluarkan cairan, terutama di lipatan kulit.</li>
<li>Bercak yang berubah warna, membesar, atau muncul tonjolan baru yang menetap.</li>
<li>Keluhan kulit yang sudah dirawat berulang tetapi kembali lagi di tempat yang sama.</li>
</ul>
<p>Pada bayi, tanda seperti lemas, tidak mau menyusu, atau kulit yang terasa dingin bersama ruam perlu
ditangani lebih cepat. Bila ragu, lebih baik memeriksakan lebih awal, karena penanganan yang terlambat
biasanya membuat perawatan jadi lebih panjang.</p>

<h2>Kapan Masih Cukup Ditangani di Rumah</h2>
<p>Untuk keluhan ringan, perawatan sederhana di rumah sering sudah cukup. Yang paling berpengaruh
biasanya soal kebersihan dan kelembapan kulit.</p>
<ul>
<li>Mandi air hangat, bukan air panas, dan batasi waktunya agar kulit tidak makin kering.</li>
<li>Pakai sabun yang lembut dan tanpa pewangi, lalu tepuk pelan saat mengeringkan.</li>
<li>Oleskan pelembap segera setelah mandi, saat kulit masih sedikit lembap.</li>
<li>Pilih pakaian berbahan katun dan tidak ketat supaya kulit bisa bernapas.</li>
<li>Jaga kuku anak tetap pendek agar garukan tidak melukai kulit.</li>
<li>Hentikan sementara produk baru yang dicurigai memicu reaksi.</li>
</ul>
<p>Kalau keluhannya membaik dalam beberapa hari, perawatan di rumah bisa dilanjutkan. Yang perlu
dihindari adalah memakai krim keras atau obat yang tidak ditujukan untuk anak, sebab kulit anak
menyerap bahan aktif lebih cepat.</p>

<h2>Apa yang Terjadi Saat Anak Diperiksa</h2>
<p>Pemeriksaan dimulai dengan pertanyaan seputar riwayat keluhan, sejak kapan muncul, di bagian mana
saja, dan apa yang sudah dipakai untuk mengobatinya. Dokter juga biasanya menanyakan riwayat alergi di
keluarga, pola makan, serta bahan yang bersentuhan dengan kulit anak sehari-hari.</p>

<p>Setelah itu kulit anak diperiksa langsung, termasuk bagian yang tidak terlihat jelas saat di rumah.
Kalau diperlukan, dokter dapat menyarankan pemeriksaan penunjang, misalnya kerokan kulit untuk
memastikan infeksi jamur atau tes lain sesuai temuan. Tujuan pemeriksaan lanjutan adalah memastikan
penyebabnya sebelum pengobatan dimulai.</p>

<p>Orang tua biasanya mendapat penjelasan soal kemungkinan penyebab, lama perbaikan yang wajar, dan hal
yang perlu dijaga di rumah. Bila kondisi anak memerlukan tindakan lanjutan, dokter akan menjelaskan
pilihannya beserta manfaat dan risikonya.</p>

<h2>Yang Perlu Disiapkan Sebelum Datang</h2>
<p>Agar pemeriksaan lebih cepat dan tepat, ada beberapa hal yang bisa Anda siapkan dari rumah.</p>
<ul>
<li>Foto kondisi kulit saat muncul pertama kali, karena ruam bisa berubah penampilan sebelum hari
kunjungan.</li>
<li>Daftar produk yang sedang dipakai, termasuk sabun, pelembap, sampo, dan obat oles.</li>
<li>Catatan singkat soal pola makan, cuaca, atau kegiatan yang bersamaan dengan munculnya ruam.</li>
<li>Riwayat alergi pada anak dan keluarganya.</li>
</ul>
<p>Untuk keluhan yang ringan dan sudah lama berulang, konsultasi awal bisa dilakukan secara online dengan
mengirimkan foto yang jelas. Dokter akan menilai apakah cukup ditangani dari jauh atau perlu pemeriksaan
langsung.</p>

<p>Kalau Anda belum yakin harus mulai dari mana, hubungi klinik lebih dulu untuk bertanya. Menjelaskan
kondisi anak lewat pesan sering kali membantu menentukan langkah berikutnya tanpa perlu menebak sendiri.</p>

""" + TOMBOL + """

<h2>Pertanyaan yang Sering Diajukan</h2>

<h3>Apakah keluhan kulit anak bisa ditangani tanpa tindakan?</h3>
<p>Bisa. Sebagian besar keluhan kulit anak ditangani dengan obat oles dan perawatan harian, bukan
tindakan. Tindakan medis baru dipertimbangkan bila memang diperlukan dan setelah dibicarakan dengan
orang tua.</p>

<h3>Apakah dokter kulit anak berbeda dari dokter anak?</h3>
<p>Dokter anak menangani kesehatan anak secara menyeluruh, sedangkan dokter spesialis kulit dan kelamin
menangani keluhan kulit, rambut, dan kuku, termasuk yang muncul pada anak. Untuk keluhan kulit yang
berulang atau sulit dikenali, pemeriksaan oleh dokter kulit membantu memastikan penyebabnya.</p>

<h3>Bolehkah memakai produk perawatan orang dewasa untuk kulit anak?</h3>
<p>Sebaiknya tidak, terutama produk dengan bahan aktif kuat seperti asam eksfoliasi dosis tinggi atau
retinoid. Kulit anak lebih mudah menyerap bahan tersebut dan lebih mudah teriritasi.</p>

<h3>Apakah ruam pada anak bisa dicegah?</h3>
<p>Tidak semuanya bisa dicegah, terutama yang berkaitan dengan bakat alergi. Yang masih bisa dilakukan
adalah menjaga kulit tetap lembap, memilih bahan pakaian yang lembut, dan menghindari pemicu yang sudah
diketahui.</p>

<h2>Baca juga</h2>
<p>Tanda umum kapan keluhan kulit perlu diperiksa dokter kami rangkum di
<a href="https://www.theskincodeclinic.com/kapan-harus-ke-dokter-kulit/">tanda kulit yang wajib diperiksa</a>,
sedangkan penjelasan soal eksim dan dermatitis ada di
<a href="https://www.theskincodeclinic.com/hal-penting-tentang-eksim-dermatitis-3/">hal yang perlu diketahui soal eksim</a>.
Untuk kulit anak yang kering dan bersisik, mulai dari
<a href="https://www.theskincodeclinic.com/penyebab-kulit-kering-bersisik-dan-solusinya-3/">penyebab kulit kering bersisik</a>.</p>

<p>Kalau keluhan kulit anak membuatnya susah tidur atau mengganggu kegiatan sehari-hari, itu alasan yang
cukup untuk berkonsultasi. Pemeriksaan lebih awal membantu Anda tahu apa yang sebenarnya terjadi,
sehingga perawatannya bisa diarahkan dengan tepat.</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 x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:300]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


teks = re.sub(r"<[^>]+>", " ", ISI)
kata = len(teks.split())
print(f"=== {JUDUL}")
print(f"   kata: {kata} (target 1.000-1.300)")
print(f"   meta judul: {len(META_JUDUL)} char (maks 60) · meta desc: {len(META_DESC)} char (140-158)")
print(f"   tombol WA: {'ada' if 'wa.me' in ISI else 'TIDAK ADA'}")
print(f"   tautan internal: {len(re.findall('theskincodeclinic.com', ISI))}")
print(f"   sub-judul H2: {ISI.count('<h2')} · H3: {ISI.count('<h3')}")
print(f"   tanggal jadwal: {TANGGAL} (08:00 WIB)")

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

# ---------- 1. buat draf ----------
st, d = rest("/wp-json/wp/v2/posts", "POST", {"title": JUDUL, "slug": SLUG, "content": ISI,
                                              "status": "draft", "comment_status": "closed"})
if not isinstance(d, dict) or "id" not in d:
    sys.exit(f"   ❌ gagal buat draf: {st} {str(d)[:200]}")
PID = d["id"]
print(f"\n[1] draf #{PID} → {d.get('link')} · status={d.get('status')}")

# ---------- 2. gambar unggulan ----------
try:
    from PIL import Image, ImageDraw, ImageFont
    FONTS = os.path.expanduser("~/.fonts")
    NAVY, BIRU, ABU, PUTIH = (11, 31, 58), (30, 64, 175), (100, 116, 139), (255, 255, 255)
    W, H, PAD = 1000, 567, 62
    f = lambda n, s: ImageFont.truetype(os.path.join(FONTS, n), s)

    def bungkus(t, font, maks):
        baris, kini = [], ""
        for k in t.split():
            c = (kini + " " + k).strip()
            if font.getlength(c) <= maks:
                kini = c
            else:
                if kini:
                    baris.append(kini)
                kini = k
        if kini:
            baris.append(kini)
        return baris

    img = Image.new("RGB", (W, H), PUTIH)
    dr = ImageDraw.Draw(img)
    panel = int(W * 0.34)
    dr.rectangle([W - panel, 0, W, H], fill=BIRU)
    for i, r in enumerate((150, 110, 70)):
        x, y = W - panel // 2, H // 2
        dr.ellipse([x - r, y - r, x + r, y + r], outline=PUTIH, width=3 if i == 2 else 2)
    dr.line([W - panel // 2, H // 2 - 46, W - panel // 2, H // 2 + 46], fill=PUTIH, width=10)
    dr.line([W - panel // 2 - 46, H // 2, W - panel // 2 + 46, H // 2], fill=PUTIH, width=10)
    dr.rectangle([0, 0, 10, H], fill=BIRU)
    dr.text((PAD, PAD - 6), "THE SKIN CODE CLINIC", font=f("Poppins-SemiBold.ttf", 24), fill=BIRU)
    dr.text((PAD, PAD + 26), "Krian, Sidoarjo", font=f("Poppins-Regular.ttf", 20), fill=ABU)
    maks = W - panel - PAD - 46
    y = 160
    for b in bungkus("Kapan Anak Perlu", f("Poppins-Bold.ttf", 56), maks):
        dr.text((PAD, y), b, font=f("Poppins-Bold.ttf", 56), fill=NAVY)
        y += 68
    for b in bungkus("ke Dokter Kulit", f("Poppins-Bold.ttf", 56), maks):
        dr.text((PAD, y), b, font=f("Poppins-Bold.ttf", 56), fill=NAVY)
        y += 68
    y += 8
    for b in bungkus("Tanda yang perlu diwaspadai dan cara merawatnya", f("Poppins-Regular.ttf", 26), maks):
        dr.text((PAD, y), b, font=f("Poppins-Regular.ttf", 26), fill=ABU)
        y += 36
    dr.rectangle([PAD, H - 96, PAD + 74, H - 92], fill=BIRU)
    dr.text((PAD, H - 78), "theskincodeclinic.com", font=f("Poppins-SemiBold.ttf", 23), fill=NAVY)
    dr.text((PAD, H - 46), "Konsultasi lewat WhatsApp · 0851-1744-4417", font=f("Poppins-Regular.ttf", 20), fill=ABU)
    img.save(GAMBAR, "WEBP", quality=92, method=6)
    print(f"[2] gambar: {GAMBAR} {img.size} {os.path.getsize(GAMBAR)//1024} KB")

    data = open(GAMBAR, "rb").read()
    nama = os.path.basename(GAMBAR)
    h = {"Authorization": f"Basic {AUTH}", **UA, "Content-Type": "image/webp",
         "Content-Disposition": f'attachment; filename="{nama}"'}
    r = urllib.request.Request(f"https://{DOM}/wp-json/wp/v2/media", data=data, headers=h, method="POST")
    with urllib.request.urlopen(r, timeout=300) as x:
        med = json.loads(x.read())
    print(f"    unggah media #{med['id']} → {med.get('source_url')}")
    stm, dm = rest(f"/wp-json/wp/v2/media/{med['id']}", "POST",
                   {"alt_text": ALT_GAMBAR, "title": f"Gambar unggulan: {JUDUL}"})
    stp, dp = rest(f"/wp-json/wp/v2/posts/{PID}", "POST", {"featured_media": med["id"]})
    time.sleep(2)
    _, cekp = rest(f"/wp-json/wp/v2/posts/{PID}?context=edit&_fields=featured_media")
    print(f"    featured_media tersimpan: {cekp.get('featured_media') if isinstance(cekp, dict) else cekp}")
    _, cekm = rest(f"/wp-json/wp/v2/media/{med['id']}?context=edit&_fields=alt_text")
    print(f"    alt_text tersimpan: {str(cekm)[:120]}")
except Exception as e:
    print(f"[2] ⚠ gambar unggulan GAGAL: {str(e)[:200]} — lanjut tanpa gambar")

# ---------- 3. meta Yoast via XML-RPC (kirim ulang seluruh custom field) ----------
try:
    proxy = xmlrpc.client.ServerProxy(f"https://www.{DOM}/xmlrpc.php", allow_none=True)
    p = proxy.wp.getPost(0, USER, SANDI, PID)
    cf = p.get("custom_fields", [])
    print(f"[3] custom field lama: {len(cf)} → {[x.get('key') for x in cf]}")
    baru = {x["key"]: x["value"] for x in cf}
    baru["_yoast_wpseo_title"] = META_JUDUL
    baru["_yoast_wpseo_metadesc"] = META_DESC
    baru["_yoast_wpseo_focuskw"] = FOKUS
    kirim = [{"key": k, "value": v} for k, v in baru.items()]
    proxy.wp.editPost(0, USER, SANDI, PID, {"custom_fields": kirim})
    time.sleep(2)
    p2 = proxy.wp.getPost(0, USER, SANDI, PID)
    v = {x["key"]: x["value"] for x in p2.get("custom_fields", [])}
    print(f"    tersimpan: title={v.get('_yoast_wpseo_title')!r}")
    print(f"               desc={v.get('_yoast_wpseo_metadesc')!r}")
    print(f"               focuskw={v.get('_yoast_wpseo_focuskw')!r}")
    print(f"    jumlah field setelah tulis: {len(v)}")
except Exception as e:
    print(f"[3] ⚠ meta Yoast GAGAL: {str(e)[:200]}")

# ---------- 4. jadwalkan ----------
sts, ds = rest(f"/wp-json/wp/v2/posts/{PID}", "POST", {"status": "future", "date": TANGGAL})
print(f"[4] jadwalkan: HTTP {sts}")
time.sleep(3)
_, akhir = rest(f"/wp-json/wp/v2/posts/{PID}?context=edit&_fields=id,status,date,date_gmt,slug,link,featured_media,title")
if isinstance(akhir, dict):
    print(f"    status={akhir.get('status')} · date={akhir.get('date')} · slug={akhir.get('slug')}")
    print(f"    featured_media={akhir.get('featured_media')}")
    _, isi = rest(f"/wp-json/wp/v2/posts/{PID}?context=edit&_fields=content")
    html = ((isi or {}).get("content") or {}).get("raw", "") if isinstance(isi, dict) else ""
    print(f"    isi: {len(html)} char · tombol WA: {'ada' if 'wa.me/6285117444417' in html else 'TIDAK ADA'} · "
          f"sub-judul h2: {html.count('<h2')}")
else:
    print(f"    baca balik gagal: {akhir}")
print(f"\npost #{PID} · {akhir.get('link') if isinstance(akhir, dict) else ''}")
