#!/usr/bin/env python3
"""TSC — artikel harian: «Kulit Sensitif: Penyebab dan Cara Merawat yang Tepat».

Topik dari tsc_topik_bank.json (entri pertama yang belum dipakai, fokus «kulit sensitif»).
Sudah disaring tsc_cek_topik.py: aman (skor tertinggi 0,14 ke #1908, di bawah ambang 0,30).
Halaman lama #1901 memakai fokus «dokter kulit sensitif Krian» (niat lokal), artikel ini
menjawab niat informasi soal penyebab dan perawatannya.

Alur: draf (REST) → gambar unggulan (desain sendiri, 1000x567 webp) → meta Yoast (XML-RPC,
kirim ulang seluruh custom field) → jadwalkan 2026-10-17 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 = "Kulit Sensitif: Penyebab dan Cara Merawat yang Tepat"
SLUG = "kulit-sensitif-penyebab-dan-cara-merawat"
FOKUS = "kulit sensitif"
META_JUDUL = "Kulit Sensitif: Penyebab dan Cara Merawat yang Tepat"
META_DESC = ("Kulit sensitif membuat wajah mudah perih, kemerahan, dan gatal. Kenali penyebab serta "
             "pemicunya, lalu cara merawat kulit sensitif setiap hari.")
TANGGAL = "2026-10-17T01:00:00"   # 08:00 WIB (zona situs UTC)
GAMBAR = f"{WS}/tsc_feat_kulit-sensitif-penyebab-dan-cara-merawat.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>Kulit Anda terasa perih begitu mencoba produk baru. Wajah memerah setelah sebentar terkena sinar matahari,
atau terasa kencang dan panas padahal tidak sedang berjerawat. Bagi sebagian orang, keadaan seperti ini
berulang terus sehingga memilih sabun pun jadi pekerjaan yang menegangkan.</p>

<p>Kulit yang mudah bereaksi bukan kondisi langka, dan bukan berarti kulit Anda rusak permanen. Yang sering
terjadi adalah lapisan pelindung kulit bekerja kurang optimal, sehingga zat yang seharusnya tidak mengganggu
jadi terasa mengganggu. Bagian berikut menjelaskan penyebabnya, apa yang paling sering memicu kekambuhan,
dan cara merawat kulit sensitif tanpa membuatnya makin rewel.</p>

<h2>Apa yang Dimaksud Kulit Sensitif</h2>
<p>Kulit sensitif adalah keadaan ketika kulit bereaksi lebih cepat dibanding kulit pada umumnya. Reaksinya
bisa berupa kemerahan, rasa perih, gatal, sensasi terbakar, atau kulit yang terasa kencang setelah
dibersihkan.</p>

<p>Yang perlu dipahami, sensitif bukan satu penyakit dengan satu penyebab. Istilah ini dipakai untuk beberapa
kondisi yang gejalanya mirip. Ada kulit yang memang tipis dan mudah merah sejak lama karena bawaan. Ada juga
kulit yang sebelumnya biasa saja lalu berubah reaktif setelah memakai produk tertentu, menjalani perawatan
terlalu sering, atau mengalami peradangan yang tidak tuntas. Karena asalnya berbeda, penanganannya juga tidak
bisa disamakan.</p>

<h2>Penyebab Kulit Menjadi Mudah Reaktif</h2>
<p>Lapisan pelindung kulit bekerja seperti tembok. Sel kulit tersusun rapat dan direkatkan oleh minyak alami
serta zat yang menjaga kelembapan. Selama susunannya utuh, iritan dari luar sulit masuk. Ketika lapisan itu
melemah, zat asing lebih mudah masuk dan kulit meresponsnya dengan peradangan.</p>

<p>Beberapa hal yang paling sering membuat lapisan pelindung ini melemah:</p>
<ul>
<li>Pembersih yang terlalu keras atau dipakai terlalu sering, terutama yang membuat kulit terasa kencang
setelah dibasuh.</li>
<li>Eksfoliasi berlebihan, baik memakai scrub maupun asam, apalagi kalau keduanya dipakai bersamaan.</li>
<li>Terlalu banyak jenis produk baru dalam waktu bersamaan sehingga kulit tidak sempat menyesuaikan diri.</li>
<li>Udara kering, polusi, angin, dan paparan matahari tanpa pelindung.</li>
<li>Kondisi kulit tertentu seperti eksim, dermatitis, atau rosacea yang membuat kulit memang lebih mudah
meradang.</li>
<li>Perubahan hormon dan tingkat stres yang memengaruhi kelenjar minyak serta proses perbaikan kulit.</li>
</ul>

<p>Satu hal yang sering luput, kulit sensitif tidak selalu berarti kulit alergi. Alergi kulit melibatkan
reaksi sistem imun terhadap zat tertentu dan umumnya muncul di area yang bersentuhan langsung dengan zat itu.
Pada kulit sensitif, reaksinya bisa muncul di mana saja karena sumbernya ada pada lapisan pelindung yang
melemah, bukan pada satu bahan tertentu.</p>

<h2>Pemicu yang Paling Sering Membuat Kulit Kambuh</h2>
<p>Setelah kulit membaik, ada kebiasaan yang mudah membuatnya kembali rewel. Beberapa yang paling sering
ditemui di praktik:</p>
<ul>
<li>Berganti produk terlalu cepat sebelum sempat menilai hasilnya.</li>
<li>Menggabungkan beberapa bahan aktif dalam satu kali pemakaian.</li>
<li>Membasuh wajah dengan air panas dan menggosoknya terlalu kencang.</li>
<li>Memakai handuk atau spons yang jarang diganti.</li>
<li>Melewatkan tabir surya, terutama saat cuaca terik atau saat berkendara.</li>
</ul>
<p>Untuk mengetahui pemicu Anda sendiri, catat produk dan kejadian yang mendahului reaksi. Catatan tiga sampai
empat pekan biasanya sudah menunjukkan polanya. Kalau ingin menambah produk baru, beri jeda sekitar dua pekan
antar produk supaya penyebab reaksi lebih mudah dilacak.</p>

<h2>Cara Merawat Kulit Sensitif Setiap Hari</h2>
<p>Prinsipnya sederhana: kurangi jumlah langkah, jaga kelembapan, dan lindungi kulit dari matahari. Rutinitas
yang panjang bukan tanda perawatan serius, terutama bagi kulit yang sedang reaktif.</p>
<ul>
<li>Pembersih lembut dipakai dua kali sehari. Setelah dibasuh, kulit sebaiknya terasa nyaman, tidak kencang.</li>
<li>Pelembap dengan bahan penjaga kelembapan seperti ceramide atau gliserin, dipakai saat kulit masih sedikit
lembap.</li>
<li>Tabir surya dengan SPF 30 ke atas setiap hari, termasuk saat berada di dalam ruangan yang banyak terkena
cahaya matahari.</li>
<li>Produk baru ditambahkan satu per satu dengan jeda dua pekan, dan diuji lebih dulu di area kecil seperti
belakang telinga.</li>
<li>Hentikan produk yang memicu kemerahan atau rasa perih, jangan dipaksa dipakai sampai habis.</li>
<li>Pakai air bersuhu ruang saat membersihkan, karena air panas mempermudah lepasnya minyak alami kulit.</li>
</ul>
<p>Tindakan seperti peeling, eksfoliasi, atau perawatan di klinik memang bisa membantu, tetapi pada kulit yang
sedang meradang sebaiknya dijadwalkan setelah kulit lebih tenang. Memaksakan tindakan saat kulit masih reaktif
biasanya memperpanjang masa pemulihannya.</p>

<h2>Bahan yang Perlu Dicermati</h2>
<p>Beberapa bahan lebih sering menimbulkan rasa perih pada kulit yang sedang sensitif, misalnya alkohol kadar
tinggi, pewangi, dan asam dengan konsentrasi kuat. Bukan berarti bahan-bahan itu selalu buruk, tetapi pada
kulit yang reaktif pemakaiannya sebaiknya diatur.</p>

<p>Sebaliknya, bahan seperti ceramide, niacinamide pada kadar ringan, dan pelembap sejenis hyaluronic acid
umumnya lebih diterima. Kalau produk yang Anda pakai menimbulkan rasa terbakar yang bertahan lebih dari
beberapa menit, itu tanda perlu dihentikan, bukan ditunggu sampai kulit terbiasa.</p>

<h2>Kapan Sebaiknya Diperiksa ke Dokter</h2>
<p>Banyak kasus kulit sensitif cukup dibantu dengan perbaikan rutinitas. Namun ada keadaan yang sebaiknya
diperiksa supaya penyebabnya jelas dan tidak salah ditangani.</p>
<ul>
<li>Kemerahan atau iritasi tidak membaik setelah dua sampai tiga pekan perawatan sederhana.</li>
<li>Ruam menyebar, berair, atau menimbulkan luka.</li>
<li>Muncul bengkak, terutama di wajah, bibir, atau kelopak mata.</li>
<li>Kulit terasa panas disertai nyeri, bukan hanya tidak nyaman.</li>
<li>Reaksi tetap muncul walau Anda sudah menghindari banyak produk.</li>
</ul>
<p>Pemeriksaan awal biasanya berlangsung singkat. Dokter menanyakan riwayat produk dan keluhan Anda, memeriksa
kondisi kulit, lalu menjelaskan kemungkinan penyebabnya. Kalau diperlukan, ada pemeriksaan tambahan seperti uji
alergi. Setelah itu barulah disusun rencana perawatan yang sesuai dengan kondisi kulit Anda, bukan daftar
tindakan yang dipilih tanpa alasan.</p>

""" + TOMBOL + """

<h2>Pertanyaan yang Sering Diajukan</h2>

<h3>Apakah kulit sensitif bisa hilang?</h3>
<p>Kulit sensitif lebih tepat dipahami sebagai kondisi yang dikelola, bukan yang selesai setelah satu kali
perawatan. Dengan rutinitas yang tepat, keluhan seperti perih dan kemerahan umumnya berkurang dan
kekambuhannya lebih jarang.</p>

<h3>Apakah produk berlabel untuk kulit sensitif selalu aman?</h3>
<p>Label itu tidak menjamin cocok untuk semua orang. Yang menentukan adalah susunan bahannya dan reaksi kulit
Anda sendiri. Karena itu, uji produk baru pada area kecil lebih dulu sebelum dipakai ke seluruh wajah.</p>

<h3>Bisakah tetap memakai riasan?</h3>
<p>Bisa. Pilih riasan yang tidak membuat kulit terasa panas, dan bersihkan dengan pembersih lembut tanpa
menggosok berulang. Kalau kulit sedang meradang, memberi jeda beberapa hari biasanya membantu.</p>

<h3>Apakah semua produk harus dihentikan dulu?</h3>
<p>Tidak selalu. Menghentikan seluruh produk sekaligus membuat penyebab reaksi sulit dilacak. Yang lebih sering
dianjurkan adalah menyederhanakan rutinitas, lalu menambah produk kembali satu per satu.</p>

<h2>Baca juga</h2>
<p>Penjelasan soal lapisan pelindung kulit dan cara menjaganya kami ulas di
<a href="https://www.theskincodeclinic.com/menjaga-skin-barrier-kulit-sehat/">panduan menjaga skin barrier kulit</a>.
Kalau keluhan Anda lebih ke arah kering dan bersisik, lihat
<a href="https://www.theskincodeclinic.com/penyebab-kulit-kering-bersisik-dan-solusinya-3/">penyebab kulit kering bersisik dan solusinya</a>,
sedangkan kemerahan berulang yang disertai gatal bisa mengarah ke
<a href="https://www.theskincodeclinic.com/hal-penting-tentang-eksim-dermatitis-3/">eksim atau dermatitis</a>.
Untuk tanda yang perlu diperiksa lebih cepat, ada di
<a href="https://www.theskincodeclinic.com/kapan-harus-ke-dokter-kulit/">kapan sebaiknya ke dokter kulit</a>.</p>

<p>Kalau kulit Anda sudah lama rewel dan Anda mulai ragu mencoba produk apa pun, itu alasan yang cukup untuk
berkonsultasi. Pemeriksaan akan menunjukkan kondisi kulit Anda dan langkah perawatan yang masuk akal, tanpa
perlu menebak sendiri.</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.ellipse([W - panel // 2 - 30, H // 2 - 30, W - panel // 2 + 30, H // 2 + 30], 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("Kulit Sensitif", f("Poppins-Bold.ttf", 60), maks):
        dr.text((PAD, y), b, font=f("Poppins-Bold.ttf", 60), fill=NAVY)
        y += 72
    y += 4
    for b in bungkus("Penyebab, pemicu, 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 ''}")
