#!/usr/bin/env python3
"""Gelombang 4 klaster serbuk Yasma: pilar #3416 (tren, varian rasa, bahan baku).
Gabung 6 artikel tren/varian/inovasi, pertahankan 2 pendukung (bahan baku & cara menentukan rasa).
GUARD: hanya post."""
import base64, html, importlib.util, json, os, re, sys, time, urllib.request, urllib.error

S = "https://yasmanatura.co.id"
AUTH = base64.b64encode(b"bambangbot:LFp4 LXBh kMYG 84qC 2DDc 5bLc").decode()
PILAR = 3416
BUANG = [4531, 3249, 3259, 2816, 3167, 2964]
TAUT = [3579, 4575]
PILAR_GEL2 = "https://yasmanatura.co.id/maklon-minuman-serbuk-indonesia-yasma-natura-partner-maklon-nasional-untuk-produk-minuman-kesehatan/"

JUDUL = "Tren & Varian Rasa Minuman Serbuk 2026: Panduan Bahan Baku untuk Pemilik Brand"
FK = "tren minuman serbuk"
META = ("Tren minuman serbuk 2026 dan varian rasa yang laris: bahan baku populer, inovasi rasa per segmen, "
        "dan cara menguji rasa sebelum produksi massal.")

WA = """
<style>
.ss-cta-wa{display:inline-flex;align-items:center;gap:10px;background-color:#6878d6;color:#ffffff !important;
font-family:'Open Sans',sans-serif;font-weight:600;font-size:17px;padding:15px 30px;border-radius:8px;
text-decoration:none !important;line-height:1.2;box-shadow:0 2px 8px rgba(104,120,214,.35)}}
.ss-cta-wa:hover{{background-color:#4d61d6;color:#ffffff !important}}
</style>
<p style="text-align:center;margin:34px 0 6px">
<a class="ss-cta-wa" href="https://wa.me/6281939119209?text=Halo%20Yasma%20Natura%2C%20saya%20ingin%20konsultasi%20varian%20rasa%20minuman%20serbuk" target="_blank" rel="noopener" role="button">WhatsApp: Konsultasi Gratis</a>
</p>
<p style="text-align:center;font-size:14px;margin:0 0 26px;color:#5b5b6b">Ceritakan rencana produk Anda, tim kami bantu menaksir biaya dan waktu produksinya.</p>
"""

ISI = """
<p>Tren minuman serbuk 2026 bergerak ke dua arah sekaligus: bahan yang makin fungsional, dan rasa yang makin spesifik untuk satu kelompok pembeli. Panduan ini merangkum tren bahannya, varian rasa yang terbukti laku di pasaran, inovasi untuk ceruk khusus, dan cara menguji rasa sebelum masuk produksi — supaya Anda tidak memproduksi ribuan sachet yang akhirnya tidak disukai pasar.</p>

<h2>Kenapa tren bahan menentukan pilihan produk</h2>
<p>Pembeli produk kesehatan saat ini tidak lagi sekadar mencari "minuman sehat". Mereka mencari manfaat yang spesifik: pencernaan lancar, kulit lebih baik, tidur lebih nyenyak, atau energi yang stabil. Bahan yang sedang banyak dicari adalah yang bisa menjelaskan manfaat itu dalam satu kalimat. Kalau produk Anda tidak bisa dijelaskan sesingkat itu, calon pembeli biasanya berpindah ke produk lain yang lebih jelas.</p>

<h2>Bahan yang naik daun tahun ini</h2>
<p><strong>Serat dan prebiotik</strong> untuk kesehatan pencernaan — permintaannya stabil dan berulang, karena konsumen yang cocok biasanya memakai jangka panjang. <strong>Kolagen</strong> untuk kulit, sering dipadukan dengan vitamin C. <strong>Adaptogen</strong> seperti ashwagandha dan ginseng untuk mengelola stres. <strong>Pemanis alami</strong> seperti stevia untuk produk rendah gula. Dan <strong>rempah lokal</strong> — temulawak, jahe, kunyit — yang punya keunggulan cerita: bahan Indonesia yang tidak dimiliki produk impor.</p>

<h2>Varian rasa yang terbukti laris</h2>
<p>Empat keluarga rasa yang paling sering berhasil: buah tropis (mangga, jeruk, markisa), madu dengan lemon, cokelat dan karamel, serta rempah hangat. Untuk produk herbal, rasa rempah biasanya lebih diterima kalau dipadukan pemanis alami secukupnya. Yang perlu diingat, rasa yang laris untuk satu segmen belum tentu cocok di segmen lain — anak dan dewasa punya preferensi yang berbeda jauh.</p>

<h2>Inovasi rasa untuk ceruk khusus</h2>
<p>Kalau ingin menghindari persaingan ketat, buat rasa untuk satu kebutuhan spesifik. Contoh yang sudah berjalan di pasar: rasa menenangkan untuk pekerja kantoran yang sering stres, rasa manis lembut untuk anak, rasa segar untuk penggemar olahraga, dan rasa ringan tanpa gula untuk pembeli yang membatasi kalori. Produk seperti ini lebih mudah dipromosikan karena pesannya langsung ke satu kelompok.</p>

<h2>Cara menguji rasa sebelum produksi</h2>
<p>Tiga langkah. <strong>Satu</strong>, tentukan tiga varian rasa yang paling sesuai segmen, bukan sepuluh. <strong>Dua</strong>, buat sampel dalam jumlah kecil lalu ujikan ke calon pembeli sesungguhnya — bukan ke keluarga atau teman kantor. <strong>Tiga</strong>, catat tiga hal dari setiap uji: tingkat kesukaan, alasan, dan kesediaan membeli ulang. Varian yang menang di dua dari tiga ukuran itu layak masuk produksi; sisanya simpan untuk pengembangan berikutnya.</p>

<h2>Kesalahan umum dalam menentukan rasa</h2>
<p>Memilih rasa berdasarkan selera pribadi. Membuat terlalu banyak varian pada produksi pertama sehingga biaya kemasan membengkak. Mengabaikan konsistensi: rasa yang enak di sampel bisa berubah di produksi besar kalau bahan bakunya berganti pemasok. Dan menyesuaikan rasa hanya berdasarkan keluhan tanpa mencatat apa yang disukai pembeli.</p>

<h2>Menyesuaikan rasa dengan segmen</h2>
<p>Untuk anak, rasa manis buah dan warna cerah lebih menentukan. Untuk dewasa yang peduli kesehatan, rasa yang tidak terlalu manis justru lebih dipercaya. Untuk pekerja sibuk, kemasan sachet tunggal dan rasa yang tidak meninggalkan aftertaste jadi pertimbangan. Untuk penggemar olahraga, rasa segar dengan sedikit sensasi dingin biasanya lebih disukai. Empat hal ini cukup sebagai kompas awal sebelum uji rasa.</p>

<h2>Pertanyaan yang sering muncul</h2>
<h3>Berapa varian rasa yang ideal untuk produksi pertama?</h3><p>Dua sampai tiga varian. Lebih dari itu membuat biaya kemasan dan pengelolaan stok naik sebelum permintaan terbukti.</p>
<h3>Bagaimana kalau saya ingin membuat rasa yang belum ada di pasar?</h3><p>Boleh, tapi ujilah lebih hati-hati. Rasa yang benar-benar baru butuh lebih banyak sampel dan penjelasan ke pembeli, karena mereka belum punya pembanding.</p>
<h3>Apakah bahan alami membuat rasa lebih sulit distabilkan?</h3><p>Ya, karena bahan alami tidak selalu seragam antar panen. Karena itu perlu penyesuaian formula dan pemilihan pemasok yang konsisten.</p>
<h3>Apakah pemanis alami seperti stevia mengubah rasa?</h3><p>Bisa, terutama aftertaste-nya. Penyesuaian takaran dan paduan bahan biasanya diperlukan hingga rasanya seimbang.</p>
<h3>Bagaimana cara mengetahui rasa yang tepat untuk pasar tertentu?</h3><p>Ujikan sampel ke calon pembeli di segmen itu, lalu catat tingkat kesukaan dan kesediaan membeli ulang — bukan hanya pendapat.</p>
"""



# tambahan isi pilar (dari ys_serbuk_tambahan4.py)
_spec = importlib.util.spec_from_file_location("_ysb4", os.path.join(os.path.dirname(os.path.abspath(__file__)), "ys_serbuk_tambahan4.py"))
_modb4 = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(_modb4)
ISI = ISI.replace('<h2>Pertanyaan yang sering muncul</h2>', _modb4.TAMBAHAN + "\n<h2>Pertanyaan yang sering muncul</h2>")

def api(path, data=None, method=None):
    method = method or ("POST" if data is not None else "GET")
    h = {"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"}
    body = None
    if data is not None:
        body = json.dumps(data).encode(); h["Content-Type"] = "application/json"
    err = None
    r = urllib.request.Request(S + path, data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=220) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            if e.code in (404, 410, 500, 502, 503, 504):
                time.sleep(4); continue
            return e.code, e.read().decode()[:200]
        except Exception as e:
            err = e; time.sleep(4)
    return 0, str(err)[:150] if err else "gagal"


print("=== GUARD tipe post ===")
for pid in [PILAR] + BUANG + TAUT:
    st, d = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=type,status")
    t = d.get("type") if isinstance(d, dict) else f"gagal({st})"
    if t != "post":
        print(f"  #{pid} tipe={t} ⛔ bukan post — dibatalkan"); sys.exit(1)
print(f"  semua {len([PILAR]+BUANG+TAUT)} sasaran = post ✅")

kata = len(html.unescape(re.sub(r"<[^>]+>", " ", ISI)).split())
print(f"\npilar #{PILAR}: {JUDUL}\n  {kata} kata | meta {len(META)} char | fk di awal: {META.lower().startswith(FK.lower())}")
if "--apply" not in sys.argv:
    print(f"\n  6 dipensiunkan: {BUANG}\n  2 ditautkan   : {TAUT}")
    sys.exit(0)

pasangan = [(re.sub(r"<[^>]+>", " ", m.group(1)).strip(), re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", m.group(2))).strip())
            for m in re.finditer(r"<h3[^>]*>(.*?)</h3>\s*<p>(.*?)</p>", ISI, re.S)]
schema = ('<script type="application/ld+json">' + json.dumps({
    "@context": "https://schema.org", "@type": "FAQPage",
    "mainEntity": [{"@type": "Question", "name": q, "acceptedAnswer": {"@type": "Answer", "text": a}} for q, a in pasangan]},
    ensure_ascii=False) + "</script>")
konten = ISI + f'\n<h2>Baca juga</h2>\n<p>Untuk produksinya, lihat <a href="{PILAR_GEL2}">maklon minuman serbuk</a>; untuk sisi bisnisnya ada <a href="https://yasmanatura.co.id/7-peluang-bisnis-minuman-serbuk-untuk-kebugaran-olahraga/">peluang bisnis minuman serbuk</a>.</p>\n' + schema + "\n" + WA

st, _ = api(f"/wp-json/wp/v2/posts/{PILAR}", {
    "title": JUDUL, "content": konten,
    "meta": {"_yoast_wpseo_focuskw": FK, "_yoast_wpseo_title": JUDUL, "_yoast_wpseo_metadesc": META}})
_, chk = api(f"/wp-json/wp/v2/posts/{PILAR}?context=edit&_fields=content,meta,link")
raw = chk["content"]["raw"]
kanonik = chk.get("link", "")
print(f"\nPILAR #{PILAR} POST {st} | {len(html.unescape(re.sub(r'<[^>]+>', ' ', raw)).split())} kata | FAQ {raw.count('<h3>')} Q | meta {len(chk['meta'].get('_yoast_wpseo_metadesc',''))}")
print(f"  URL kanonik: {kanonik}")

print("\nmenautkan pendukung ke pilar:")
for pid in TAUT:
    st2, p = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content,type")
    if p.get("type") != "post":
        print(f"  #{pid} bukan post — dilewati"); continue
    r2 = p["content"]["raw"]
    if kanonik and kanonik in r2:
        print(f"  #{pid} sudah menautkan"); continue
    blok = (f'\n<h2>Baca juga</h2>\n<p>Gambaran tren dan varian rasanya ada di '
            f'<a href="{kanonik}">tren minuman serbuk 2026</a> — bahan, rasa, dan cara mengujinya.</p>\n')
    m = re.search(r"\n<h2[^>]*>\s*(Pertanyaan|FAQ|Kesimpulan|Baca juga)", r2, re.I)
    baru = (r2[:m.start()] + blok + r2[m.start():]) if m else (r2.rstrip() + "\n" + blok)
    st3, _ = api(f"/wp-json/wp/v2/posts/{pid}", {"content": baru})
    print(f"  #{pid} POST {st3}")

print("\nmemindahkan ke trash:")
for pid in BUANG:
    st4, _ = api(f"/wp-json/wp/v2/posts/{pid}", method="DELETE")
    _, c2 = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=status")
    print(f"  #{pid} DELETE {st4} | status: {c2.get('status') if isinstance(c2, dict) else c2}")
