#!/usr/bin/env python3
"""TSC — artikel harian: «Rutinitas Kulit Berminyak yang Tidak Membuat Makin Berminyak».

Topik dari tsc_topik_bank.json (entri pertama yang belum dipakai setelah entri PMS yang
dilewati karena benturan istilah). Sudah disaring tsc_cek_topik.py: aman, skor tertinggi
0,17 ke #8846 (perawatan kulit berminyak di klinik), 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-24 08:00 WIB (zona situs UTC, jadi 01:00).

Pakai --apply untuk benar-benar mengerjakan.
"""
import importlib.util
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 = "Rutinitas Kulit Berminyak yang Tidak Membuat Makin Berminyak"
SLUG = "rutinitas-kulit-berminyak-tidak-membuat-makin-berminyak"
FOKUS = "rutinitas kulit berminyak"
META_JUDUL = "Rutinitas Kulit Berminyak yang Tidak Bikin Makin Berminyak"
META_DESC = ("Urutan perawatan kulit berminyak pagi dan malam, bahan aktif yang aman, kebiasaan "
             "harian yang berpengaruh, dan tanda yang perlu diperiksa ke dokter.")
TANGGAL = "2026-10-24T01:00:00"   # 08:00 WIB (zona situs UTC)
GAMBAR = f"{WS}/tsc_feat_rutinitas-kulit-berminyak.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>Kertas minyak sudah habis sebelum jam makan siang. Makeup luntur di dahi dan hidung, sementara
pipi terasa kering karena wajah sudah dicuci dua kali. Banyak orang menanggapi keadaan ini dengan
menambah frekuensi mencuci muka, memilih sabun yang terasa kesat, lalu menghindari pelembap karena
takut minyaknya bertambah. Yang terjadi sering justru sebaliknya.</p>

<p>Kulit berminyak bukan tanda wajah kurang bersih. Minyak di permukaan wajah berasal dari kelenjar
sebasea, dan seberapa banyak produksinya banyak ditentukan hormon, genetik, serta cuaca. Yang masih
bisa diatur adalah cara merawatnya. Rutinitas yang tepat membuat kulit terasa lebih nyaman tanpa
memicu produksi minyak yang lebih banyak setelahnya.</p>

<h2>Kenapa Kulit Malah Makin Berminyak Setelah Sering Dicuci</h2>
<p>Di permukaan kulit ada lapisan lipid tipis yang menahan air dan menjaga keseimbangan. Sabun dengan
daya bersih tinggi, air panas, dan produk beralkohol mengangkat lapisan ini. Kulit yang terasa kesat
dan kencang setelah dibersihkan bukan tanda bersih, melainkan tanda lapisan pelindungnya ikut
terangkat.</p>

<p>Ketika lapisan itu terganggu, kulit kehilangan sebagian kemampuan menahan air. Permukaannya
menjadi kering sementara, lalu kelenjar sebasea bekerja lebih aktif untuk menutupinya. Dalam beberapa
jam wajah kembali mengilap, dan orang menafsirkannya sebagai tanda harus mencuci muka lagi. Siklus
inilah yang membuat banyak orang merasa kulitnya makin berminyak dari bulan ke bulan.</p>

<p>Untuk sebagian besar orang, dua kali pembersihan sehari sudah cukup, yaitu pagi dan malam. Kalau
Anda berkeringat banyak di siang hari, cukup bilas dengan air tanpa sabun. Sabun tambahan hanya
diperlukan setelah berolahraga berat atau saat wajah benar-benar kotor oleh debu.</p>

<h2>Rutinitas Pagi yang Ringan</h2>
<p>Prinsip pagi hari sederhana: bersihkan tanpa mengeringkan, lalu jaga kelembapan.</p>
<ul>
<li>Pembersih lembut berbentuk gel atau busa ringan, cukup satu kali. Gosok dengan ujung jari tanpa
menggesek kuat, lalu bilas dengan air bersuhu ruang.</li>
<li>Pelembap berbahan dasar air atau bertekstur gel. Kulit berminyak tetap butuh pelembap. Kalau
langkah ini dilewati, kulit justru kering dan produksi minyak naik. Panduan memilih pelembap yang
menjaga lapisan pelindung ada di artikel
<a href="https://www.theskincodeclinic.com/menjaga-skin-barrier-kulit-sehat/">menjaga skin barrier
kulit tetap sehat</a>.</li>
<li>Tabir surya bertekstur gel atau fluid dengan SPF 30 atau lebih. Pilih yang berlabel non-comedogenic.
Pemakaian setiap hari lebih menentukan dibanding memilih angka SPF tinggi tetapi jarang dipakai.</li>
<li>Kalau memakai makeup, pilih yang ringan dan tidak menumpuk tebal di area dahi, hidung, dan dagu.</li>
</ul>
<p>Urutan ini biasanya selesai dalam tiga menit. Tidak perlu menunggu masing-masing produk meresap
lama sebelum lanjut ke produk berikutnya, kecuali kulit Anda terasa perih saat ditumpuk.</p>

<h2>Rutinitas Malam yang Tidak Mengeringkan</h2>
<p>Malam adalah waktu yang lebih aman untuk bahan aktif, karena kulit tidak terpapar matahari dan
punya waktu untuk pulih.</p>
<ul>
<li>Bersihkan sisa tabir surya dan makeup. Kalau makeup tebal atau tabir suryanya tahan air, pakai
cleansing balm atau micellar water lebih dulu, lalu pembersih lembut. Langkah pertama ini tidak wajib
bagi semua orang.</li>
<li>Niacinamide membantu mengatur produksi minyak dan memperbaiki lapisan pelindung. Kadar 2 sampai 5
persen umumnya sudah cukup.</li>
<li>Asam salisilat larut dalam minyak sehingga bisa masuk ke dalam pori. Mulai dua kali seminggu dan
jangan dipakai pada malam yang sama dengan retinoid.</li>
<li>Retinoid membantu pori yang tersumbat, tetapi butuh waktu. Pakai dua malam sekali dengan jumlah
sekitar sebutir jagung, lalu tambah perlahan setelah kulit terbiasa.</li>
<li>Tutup dengan pelembap. Kalau kulit terasa perih atau mengelupas, kurangi bahan aktifnya, bukan
pelembapnya.</li>
</ul>
<p>Bahan aktif sebaiknya ditambahkan satu per satu, dengan jeda satu sampai dua minggu. Menumpuk
beberapa produk baru dalam satu malam membuat sulit diketahui mana yang membantu dan mana yang
memicu iritasi.</p>

<h2>Kebiasaan Harian yang Ikut Berpengaruh</h2>
<p>Rutinitas hanya sebagian dari gambaran. Beberapa kebiasaan kecil berpengaruh cukup besar pada
wajah berminyak.</p>
<ul>
<li>Hindari menyentuh wajah terlalu sering, terutama dagu dan dahi. Tangan membawa minyak dan kuman
dari permukaan yang Anda pegang.</li>
<li>Ganti sarung bantal dan handuk wajah secara berkala. Keduanya menempel langsung ke kulit selama
berjam-jam.</li>
<li>Kertas minyak dipakai untuk menekan, bukan menggosok. Setelah itu tidak perlu langsung mencuci
wajah; cukup tambahkan bedak tabur tipis kalau memang perlu.</li>
<li>Produk rambut seperti minyak atau pomade sebaiknya tidak menetes ke dahi dan pelipis.</li>
<li>Asupan gula dan karbohidrat olahan yang tinggi dapat memengaruhi jerawat pada sebagian orang.
Perubahannya tidak langsung terasa, jadi lakukan bertahap alih-alih menghapus semua makanan
sekaligus.</li>
<li>Kurang tidur dan stres berkepanjangan memengaruhi hormon yang mengatur produksi minyak. Ini
bagian yang sering terlewat karena tidak berhubungan langsung dengan produk.</li>
</ul>

<h2>Kapan Sebaiknya Diperiksa ke Dokter</h2>
<p>Rutinitas rumahan biasanya cukup untuk kulit berminyak tanpa keluhan lain. Ada keadaan yang
sebaiknya tidak ditangani sendiri.</p>
<ul>
<li>Jerawat meradang, bernanah, atau terasa nyeri, terutama yang mulai meninggalkan bekas.</li>
<li>Komedo tertutup yang rapat dan tidak berkurang meski perawatan sudah rutin.</li>
<li>Kulit berminyak disertai kemerahan, rasa perih, atau mengelupas, yang bisa menandakan lapisan
pelindung sedang terganggu.</li>
<li>Kondisi tidak berubah setelah 8 sampai 12 minggu merawat dengan cara yang konsisten.</li>
</ul>
<p>Pemeriksaan awal biasanya singkat. Dokter melihat kondisi kulit, menanyakan produk yang sedang
dipakai, lalu menjelaskan kemungkinan penyebabnya. Kalau perlu tindakan, pilihan seperti peeling atau
facial medis dibahas setelah kondisi kulitnya jelas. Tanda yang perlu diperiksa lebih cepat kami
rangkum di halaman
<a href="https://www.theskincodeclinic.com/kapan-harus-ke-dokter-kulit/">kapan sebaiknya ke dokter
kulit</a>.</p>

""" + TOMBOL + """

<h2>Pertanyaan yang Sering Diajukan</h2>

<h3>Apakah kulit berminyak tidak perlu pelembap?</h3>
<p>Kulit berminyak tetap butuh pelembap. Lapisan pelindung yang utuh membuat kulit tidak perlu
memproduksi minyak lebih banyak. Pilih tekstur gel atau berbahan dasar air, bukan krim tebal.</p>

<h3>Apakah mencuci muka lebih sering mengurangi minyak?</h3>
<p>Tidak. Mencuci lebih dari dua kali sehari dengan sabun cenderung membuat kulit kering dan memicu
produksi minyak berikutnya. Kalau hanya berkeringat, cukup bilas dengan air.</p>

<h3>Apakah tabir surya membuat wajah makin berminyak?</h3>
<p>Tidak, asalkan jenisnya sesuai. Tabir surya gel atau fluid biasanya lebih nyaman untuk kulit
berminyak. Yang membuat wajah terasa berat adalah lapisan produk yang terlalu tebal, bukan tabir
suryanya.</p>

<h3>Apakah minyak pembersih boleh dipakai?</h3>
<p>Boleh, terutama untuk mengangkat makeup tahan air dan tabir surya. Cleansing oil atau balm dipakai
pada kulit kering, lalu dibilas dan diikuti pembersih lembut. Setelah itu tetap pakai pelembap ringan.</p>

<h3>Apakah kulit berminyak bisa berubah menjadi normal?</h3>
<p>Produksi minyak cenderung mengikuti hormon dan usia, jadi tidak bisa diubah hanya dengan produk.
Yang bisa dicapai adalah kulit terasa lebih seimbang, pori tampak lebih rapi, dan keluhan berkurang
dengan perawatan yang konsisten.</p>

<p>Kalau wajah Anda terasa berminyak sepanjang hari meski sudah merawatnya dengan sabar, atau muncul
jerawat dan kemerahan yang tidak kunjung membaik, itu alasan yang cukup untuk berkonsultasi. Di The
Skin Code Clinic Krian, pemeriksaan dilakukan dengan melihat kondisi kulit Anda lebih dulu, sehingga
saran yang diberikan sesuai kebutuhan, bukan mengikuti produk yang sedang populer. Penjelasan tentang
layanan yang tersedia ada di halaman
<a href="https://www.theskincodeclinic.com/perawatan-kulit-berminyak-krian/">perawatan kulit
berminyak di Klinik 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 "--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("Kulit Berminyak", 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("Rutinitas yang tidak bikin makin berminyak", 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}))
