#!/usr/bin/env python3
"""TSC — artikel harian: «Obat Gatal Kulit Bebas: Batas Pemakaian yang Aman».

Topik dari tsc_topik_bank.json (entri terakhir yang belum dipakai). Sudah disaring
tsc_cek_topik.py: aman, skor tertinggi 0,12 ke #8388 (ambang 0,30).
Sudut dibedakan dari #10368 (kapan gatal berkepanjangan perlu ke dokter): artikel ini
membahas produk bebasnya, berapa lama aman dipakai, dan kesalahan pemakaian yang umum.

Alur: draf (REST) -> gambar unggulan (desain sendiri, 1000x567 webp) -> meta Yoast
(XML-RPC, kirim ulang seluruh custom field) -> jadwalkan 2026-10-29 08:00 WIB
(zona situs UTC, jadi 01:00).

Pakai --apply untuk benar-benar mengerjakan.
"""
import json
import os
import re
import sys
import time

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
from tsc_http import CFG, rest_json, xmlrpc_call  # noqa: E402

DOM = CFG["domain"]
USER, SANDI = CFG["user"], CFG["pass"]

JUDUL = "Obat Gatal Kulit Bebas: Batas Pemakaian yang Aman"
SLUG = "obat-gatal-kulit-bebas-batas-pemakaian-aman"
FOKUS = "obat gatal kulit"
META_JUDUL = "Obat Gatal Kulit Bebas: Batas Pemakaian yang Aman"
META_DESC = ("Salep dan obat gatal bebas punya batas pemakaian yang perlu diikuti. Kenali jenis "
             "bahannya, lama pakai yang aman, dan tanda yang perlu diperiksa dokter kulit.")
TANGGAL = "2026-10-29T01:00:00"   # 08:00 WIB (zona situs UTC)
GAMBAR = f"{WS}/tsc_feat_obat-gatal-bebas.webp"
ALT_GAMBAR = "Ilustrasi obat gatal kulit bebas dan batas pemakaian yang aman"

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>Rasa gatal paling sering datang malam hari, saat tubuh mulai rileks dan perhatian tidak teralih ke
hal lain. Tangan otomatis menggaruk, kulit perih, lalu besoknya Anda membeli salep gatal di apotek
terdekat tanpa sempat bertanya apa isinya. Beberapa hari pertama keluhan mereda. Setelah itu gatal yang
sama kembali di tempat yang sama, kadang lebih luas dari sebelumnya.</p>

<p>Yang sering terlewat dalam kisah seperti ini bukan merek produknya, tetapi berapa lama produk itu
dipakai dan di bagian kulit mana ia dioleskan. Dua hal itu menentukan apakah keluhan benar-benar
selesai atau hanya tertutup beberapa hari.</p>

<h2>Apa saja yang masuk kelompok obat gatal bebas</h2>
<p>Obat gatal yang dijual tanpa resep tidak bekerja dengan cara yang sama. Di apotek, paling tidak ada
empat kelompok yang sering ditemui. Krim hidrokortison termasuk steroid ringan yang menekan
peradangan. Antihistamin minum bekerja memblokir histamin, zat yang dilepas tubuh saat bereaksi alergi.
Krim penyejuk seperti kalamin, mentol, dan kamper memberi rasa dingin sehingga gatal berkurang
sementara. Krim antijamur membunuh jamur penyebab keluhan di lipatan kulit.</p>

<p>Sebagian produk menggabungkan beberapa bahan sekaligus dalam satu tube. Ada yang mencampur steroid
dengan antijamur, ada yang menambahkan antiseptik. Bagi sebagian orang campuran seperti itu terasa
praktis, tetapi untuk keluhan yang jelas penyebabnya, satu bahan yang tepat biasanya cukup. Campuran
juga menyulitkan penilaian, karena Anda jadi tidak tahu bagian mana yang sebenarnya bekerja.</p>

<p>Karena itu, langkah pertama yang masuk akal adalah memastikan keluhan Anda masuk kelompok yang mana,
bukan memilih produk termahal di rak. Gatal karena gigitan serangga berbeda penanganannya dengan gatal
karena jamur, meski di permukaan kulit keduanya tampak merah dan sama-sama membuat tangan ingin
menggaruk.</p>

<h2>Batas aman krim hidrokortison yang dijual bebas</h2>
<p>Hidrokortison 1% adalah steroid paling ringan yang boleh dijual tanpa resep. Pemakaiannya untuk
keluhan ringan dan terbatas, misalnya gigitan serangga, iritasi karena sabun atau detergen, dan
dermatitis kontak ringan. Pada keluhan seperti ini, krim tersebut memang bisa mengurangi rasa gatal
dan kemerahan dalam hitungan hari.</p>

<p>Petunjuk pada kemasan biasanya membatasi pemakaian sekitar satu minggu, dan batas itu ada sebabnya.
Steroid bekerja dengan menekan peradangan, sedangkan peradangan adalah sinyal yang dipakai
tubuh untuk memberitahu bahwa ada sesuatu yang perlu ditangani. Kalau ditekan terus tanpa jeda, keluhan
di bawahnya tidak pernah diperiksa. Kulit juga ikut menipis, garis pembuluh darah halus mulai tampak,
dan infeksi yang sebenarnya ada di lapisan bawah justru tertutup rapi.</p>

<p>Beberapa bagian kulit perlu perhatian lebih: wajah, kelopak mata, leher, lipatan paha, dan area
popok pada bayi. Kulit di sana lebih tipis, sehingga jumlah obat yang terserap lebih besar. Untuk
bagian tersebut, pemakaian sebaiknya hanya atas petunjuk dokter. Menutup salep dengan plester atau
plastik juga tidak dianjurkan, karena cara itu membuat penyerapan lebih banyak dari yang diperkirakan
dan memperbesar kemungkinan efek samping.</p>

<h2>Kapan antihistamin minum membantu</h2>
<p>Antihistamin bekerja dengan memblokir histamin, zat yang dilepas tubuh saat bereaksi alergi. Karena
itu manfaatnya paling terasa pada gatal yang memang berasal dari reaksi alergi, seperti biduran, gatal
setelah makan makanan tertentu, atau bekas gigitan serangga. Rasa gatal biasanya berkurang cukup jelas
dalam satu sampai dua jam setelah obat diminum.</p>

<p>Untuk gatal yang penyebabnya kulit kering, jamur, atau peradangan eksim, manfaatnya kecil. Keluhan
mereda beberapa jam, lalu kembali karena sumber iritasinya belum disentuh. Kulit kering misalnya,
lebih terbantu dengan pelembap yang dipakai berulang dan pembersih yang lebih lembut. Penjelasan soal
kulit yang kering dan bersisik ada di halaman
<a href="https://www.theskincodeclinic.com/penyebab-kulit-kering-bersisik-dan-solusinya-3/">penyebab
kulit kering bersisik dan cara mengatasinya</a>.</p>

<p>Yang perlu diingat, sebagian antihistamin membuat mengantuk cukup kuat. Jangan mengendarai kendaraan
setelah meminumnya, dan jangan memberi dosis untuk anak tanpa arahan dokter. Untuk pemakaian beberapa
hari, pilih waktu minum sebelum tidur supaya rasa kantuknya tidak mengganggu pekerjaan.</p>

<h2>Kesalahan pemakaian yang paling sering terjadi</h2>
<p>Sebagian besar keluhan yang tidak kunjung membaik terjadi karena cara pakainya keliru, bukan karena
produknya palsu atau kedaluwarsa. Ada beberapa kebiasaan yang paling sering ditemui, dan semuanya bisa
diperbaiki tanpa membeli produk baru.</p>

<ul>
<li>Memakai krim antijamur untuk keluhan yang sebenarnya eksim, atau sebaliknya, lalu menyimpulkan
produknya tidak ampuh.</li>
<li>Menghentikan krim antijamur begitu gatal hilang. Jamur umumnya perlu dilanjutkan satu sampai dua
pekan setelah kulit tampak membaik.</li>
<li>Mengoleskan salep lalu menutupnya dengan plester supaya tidak terkena celana.</li>
<li>Memakai produk yang sama berbulan-bulan karena takut keluhan kembali.</li>
<li>Memakai obat sisa resep anggota keluarga lain tanpa memeriksa tanggal kedaluwarsa dan kecocokan
keluhannya.</li>
</ul>

<p>Ada satu hal lagi yang jarang disadari. Gatal yang sama bisa berasal dari dua sebab sekaligus.
Kulit kering yang digaruk terus bisa mengalami infeksi jamur di sela lipatan. Mengobati satu bagian
saja membuat keluhan berpindah tempat. Untuk keluhan berulang seperti eksim, pendekatannya berbeda dan
dibahas di halaman
<a href="https://www.theskincodeclinic.com/hal-penting-tentang-eksim-dermatitis-3/">hal penting
tentang eksim dan dermatitis</a>.</p>

<h2>Tanda obat bebas sudah tidak cukup</h2>
<p>Obat bebas punya tempat untuk keluhan ringan dan sesaat. Ada tanda yang menunjukkan keluhan Anda
sudah melewati batas itu.</p>

<ul>
<li>Gatal bertahan lebih dari dua pekan atau menyebar ke bagian tubuh lain.</li>
<li>Kulit melepuh, bernanah, mengeluarkan cairan, atau terasa panas.</li>
<li>Gatal mengganggu tidur hampir setiap malam.</li>
<li>Kulit menipis, muncul garis kemerahan, atau bertambah bulu halus setelah memakai krim tertentu.</li>
<li>Gatal menyerang beberapa anggota keluarga di rumah dalam waktu berdekatan.</li>
</ul>

<p>Pada keadaan seperti ini, obat bebas hanya menunda pemeriksaan. Dokter perlu melihat bentuk ruamnya
langsung, menanyakan riwayat produk yang sudah dipakai, dan bila perlu mengambil kerokan kulit untuk
memastikan ada tidaknya jamur. Pembeda antara gatal yang bisa ditangani sendiri dan yang perlu
diperiksa dijelaskan di halaman
<a href="https://www.theskincodeclinic.com/kulit-gatal-berkepanjangan-kapan-ke-dokter/">kulit gatal
berkepanjangan dan kapan perlu ke dokter</a>.</p>

""" + TOMBOL + """

<h2>Pertanyaan yang Sering Diajukan</h2>

<h3>Bolehkah krim gatal dipakai di wajah?</h3>
<p>Kulit wajah lebih tipis daripada kulit lengan atau punggung, sehingga menyerap obat lebih banyak.
Krim hidrokortison sebaiknya tidak dipakai di wajah tanpa arahan dokter. Bila gatalnya ringan, mulai
dari pembersih yang lembut dan pelembap tanpa pewangi. Kalau keluhan menetap lebih dari beberapa
hari, periksakan.</p>

<h3>Berapa lama krim antijamur sebaiknya dipakai?</h3>
<p>Umumnya dua sampai empat pekan, tergantung jenis jamur dan bagian kulit yang terkena. Yang sering
terlewat, pemakaian perlu dilanjutkan satu sampai dua pekan setelah kulit tampak membaik. Kalau setelah
waktu itu keluhan tidak berubah, kemungkinan penyebabnya bukan jamur dan perlu diperiksa ulang.</p>

<h3>Kalau gatalnya sudah hilang, apakah obat harus segera dihentikan?</h3>
<p>Tergantung jenis obatnya. Krim hidrokortison sebaiknya dihentikan begitu keluhan reda, dan tidak
dipakai sebagai perawatan rutin. Krim antijamur justru perlu dilanjutkan beberapa waktu setelah gejala
hilang supaya jamur tidak tumbuh lagi.</p>

<h3>Bolehkah salep gatal dan obat minum dipakai bersamaan?</h3>
<p>Bisa, tetapi jangan mencampur beberapa salep di tempat yang sama tanpa arahan. Bahan aktif yang
bertumpuk bisa saling mengiritasi. Kalau Anda memakai antihistamin minum, beri jeda sesuai petunjuk
kemasan dan hentikan salah satunya bila keluhan justru memburuk.</p>

<p>Kalau gatal sudah berulang lebih dari dua kali dalam sebulan, catat produk yang pernah dipakai
beserta lama pemakaiannya. Catatan sederhana itu lebih membantu daripada mengingat satu per satu saat
konsultasi. Di The Skin Code Clinic Krian, pemeriksaan dimulai dari melihat kondisi kulit dan
menelusuri riwayat produk, termasuk obat bebas yang sudah dicoba di rumah. Anda bisa menanyakan
keluhan lewat tombol di atas, atau melihat jadwal dan alur kunjungan di halaman
<a href="https://www.theskincodeclinic.com/praktik-dokter-kulit-krian-jadwal-alur/">praktik dokter
kulit di Krian</a>.</p>
"""


def baca(p, method="GET", data=None):
    st, d = rest_json(method, p, data=data)
    return st, d


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 kata < 1000 or kata > 1300:
    sys.exit("   PANJANG TIDAK SESUAI BAKU - perbaiki dulu")
if len(META_JUDUL) > 60 or not (140 <= len(META_DESC) <= 158):
    sys.exit("   META TIDAK SESUAI BAKU - perbaiki dulu")
if ISI.count("<h2") > 6:
    sys.exit("   H2 TERLALU BANYAK - perbaiki dulu")

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

# ---------- 1. buat draf ----------
st, d = baca("/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.rectangle([W - panel // 2 - 34, H // 2 - 12, W - panel // 2 + 34, H // 2 + 12], fill=PUTIH)
    dr.rectangle([W - panel // 2 - 12, H // 2 - 34, W - panel // 2 + 12, H // 2 + 34], fill=PUTIH)
    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 = 150
    for b in bungkus("Obat Gatal Bebas", f("Poppins-Bold.ttf", 58), maks):
        dr.text((PAD, y), b, font=f("Poppins-Bold.ttf", 58), fill=NAVY)
        y += 70
    y += 4
    for b in bungkus("Batas pemakaian yang aman", f("Poppins-Regular.ttf", 25), maks):
        dr.text((PAD, y), b, font=f("Poppins-Regular.ttf", 25), fill=ABU)
        y += 35
    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)
    stm, med = rest_json("POST", "/wp-json/wp/v2/media", binary=data, content_type="image/webp",
                         extra_headers={"Content-Disposition": f'attachment; filename="{nama}"'})
    if not isinstance(med, dict) or "id" not in med:
        raise RuntimeError(f"unggah media gagal: {stm} {str(med)[:200]}")
    print(f"    unggah media #{med['id']} -> {med.get('source_url')}")
    baca(f"/wp-json/wp/v2/media/{med['id']}", "POST",
         {"alt_text": ALT_GAMBAR, "title": f"Gambar unggulan: {JUDUL}"})
    baca(f"/wp-json/wp/v2/posts/{PID}", "POST", {"featured_media": med["id"]})
    time.sleep(2)
    _, cekp = baca(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 = baca(f"/wp-json/wp/v2/media/{med['id']}?context=edit&_fields=alt_text")
    print(f"    alt_text tersimpan: {str(cekm)[:160]}")
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:
    p = xmlrpc_call("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()]
    xmlrpc_call("wp.editPost", [0, USER, SANDI, PID, {"custom_fields": kirim}])
    time.sleep(2)
    p2 = xmlrpc_call("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 = baca(f"/wp-json/wp/v2/posts/{PID}", "POST", {"status": "future", "date": TANGGAL})
print(f"[4] jadwalkan: HTTP {sts}")
time.sleep(3)
_, akhir = baca(f"/wp-json/wp/v2/posts/{PID}?context=edit"
                f"&_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 = baca(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: "
          f"{'ada' if 'wa.me/6285117444417' in html else 'TIDAK ADA'} · 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 ''}")
print("JSON:", json.dumps({"id": PID, "slug": (akhir or {}).get("slug") if isinstance(akhir, dict) else None,
                           "date": (akhir or {}).get("date") if isinstance(akhir, dict) else None,
                           "status": (akhir or {}).get("status") if isinstance(akhir, dict) else None}))
