#!/usr/bin/env python3
"""Gelombang 1 klaster serbuk Yasma: 6 artikel "7 Peluang Bisnis Minuman Serbuk untuk X" → 1 pilar.
Pilar = #3696 (impresi tertinggi). Sisanya ke trash. 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()
PAYUNG_HERBAL = "https://yasmanatura.co.id/jasa-maklon-minuman-herbal/"
SERBUK_PROSES = "https://yasmanatura.co.id/proses-produksi-maklon-minuman-serbuk/"

PILAR = 3696
BUANG = [3689, 3690, 3691, 3692, 3694]

JUDUL = "Peluang Bisnis Minuman Serbuk: 7 Segmen Pasar yang Masih Terbuka"
FK = "peluang bisnis minuman serbuk"
META = ("Peluang bisnis minuman serbuk dari olahraga, ibu hamil, sampai lansia: 7 segmen pasar, "
        "cara memilih yang cocok, dan langkah memulainya.")

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%20maklon%20minuman%20serbuk" target="_blank" rel="noopener" role="button">WhatsApp: Konsultasi Gratis</a>
</p>
<p style="text-align:center;font-size:14px;color:#5b5b6b;margin:0 0 26px">Ceritakan rencana produk Anda, tim kami bantu menaksir biaya dan waktu produksinya.</p>
"""

ISI = """
<p>Peluang bisnis minuman serbuk terbuka lebar karena produknya mudah didistribusikan, tahan lama, dan bisa menyasar segmen yang sangat spesifik. Alih-alih membuat satu produk untuk semua orang, brand baru biasanya lebih cepat tumbuh kalau memilih satu segmen jelas lebih dulu. Berikut tujuh segmen yang paling sering diminta ke Yasma Natura, beserta pertimbangan masing-masing.</p>

<h2>Kenapa minuman serbuk jadi pilihan favorit brand baru</h2>
<p>Tiga alasannya praktis. Pertama, biaya distribusinya rendah karena bentuknya ringan dan tidak perlu rantai dingin. Kedua, masa simpannya panjang, sehingga risiko produk rusak di gudang kecil. Ketiga, formulasinya fleksibel: satu basis bisa dikembangkan menjadi beberapa varian rasa atau fungsi tanpa mengganti lini produksi. Tiga hal ini yang membuat banyak pemilik brand memulai dari kategori serbuk, bukan minuman siap minum.</p>

<h2>1. Kebugaran dan olahraga</h2>
<p>Segmen paling ramai. Produk yang dicari biasanya berkaitan dengan pemulihan setelah olahraga, penambah energi sebelum latihan, atau elektrolit untuk mengganti cairan. Peminatnya rutin berolahraga dan cukup peduli pada kandungan, sehingga label dan klaim manfaat harus benar-benar bisa dipertanggungjawabkan. Untuk segmen ini, rasa yang menyegarkan dan kemasan sachet praktis biasanya lebih menentukan daripada harga.</p>

<h2>2. Atlet dan pria aktif</h2>
<p>Masih beririsan dengan segmen pertama, tapi kebutuhannya lebih spesifik: peningkatan performa, massa otot, dan pemulihan cepat. Komunikasi pemasarannya sebaiknya lewat komunitas olahraga dan gym, bukan iklan umum. Yang perlu diperhatikan, klaim terkait performa termasuk paling ketat pengawasannya, jadi susun kata-katanya hati-hati.</p>

<h2>3. Pembantu tidur dan relaksasi</h2>
<p>Segmen yang tumbuh cepat beberapa tahun terakhir, terutama di kota besar. Produk biasanya berisi bahan penenang alami dan dikonsumsi malam hari. Karena manfaatnya berkaitan dengan kualitas istirahat, konsumen cenderung mengulang pembelian begitu merasakan efeknya — inilah alasan segmen ini menarik untuk jangka panjang.</p>

<h2>4. Ibu hamil dan menyusui</h2>
<p>Segmen yang menuntut kehati-hatian paling tinggi. Bahan baku harus jelas asalnya, dosisnya konservatif, dan legalitas tidak bisa ditawar. Di sisi lain, loyalitas konsumennya kuat karena kebutuhan berlangsung berbulan-bulan. Untuk produk seperti ini, kerja sama dengan bidan atau komunitas ibu menjadi jalur pemasaran yang paling efektif.</p>

<h2>5. Anak dan remaja</h2>
<p>Pasar besar dengan keputusan pembelian di tangan orang tua. Yang dinilai: keamanan bahan, kandungan gula, dan kemasan yang menarik bagi anak. Rasa menjadi faktor penentu utama, karena anak akan menolak produk yang tidak enak meski manfaatnya jelas. Segmen ini biasanya membutuhkan uji rasa lebih banyak sebelum produksi penuh.</p>

<h2>6. Kesehatan pencernaan</h2>
<p>Produk dengan kandungan serat dan probiotik. Peminatnya mencari solusi untuk keluhan yang berulang, sehingga produk yang terbukti membantu cenderung dipakai terus. Tantangan utamanya ada di formulasi: menjaga rasa tetap enak sementara kandungan seratnya tinggi. Ini salah satu segmen dengan pertumbuhan paling stabil.</p>

<h2>7. Lansia</h2>
<p>Segmen yang paling sedikit digarap, padahal jumlah penduduknya terus bertambah. Kebutuhannya berkisar pada menjaga daya tahan tubuh, kesehatan sendi, dan asupan nutrisi harian. Kemasannya biasanya perlu lebih mudah dibuka dan informasinya ditulis dengan huruf lebih besar. Persaingannya masih ringan, jadi peluang untuk menjadi yang pertama diingat cukup besar.</p>

<h2>Cara memilih segmen yang cocok</h2>
<p>Mulai dari yang Anda paling pahami. Kalau Anda dekat dengan komunitas olahraga, mulai dari sana; kalau punya latar belakang kesehatan ibu dan anak, segmen itu lebih mudah didekati. Setelah itu periksa tiga hal: apakah segmennya cukup besar untuk menguntungkan pada jumlah produksi minimum, apakah Anda punya jalur untuk menjangkau mereka, dan apakah bahan bakunya tersedia konsisten. Segmen yang cocok tapi tidak bisa dijangkau sama saja dengan tidak ada.</p>

<h2>Langkah memulainya</h2>
<p>Satu, pilih satu segmen dan satu manfaat utama — jangan tiga sekaligus. Dua, susun formula bersama penyedia maklon dan buat sampel untuk diuji ke calon pembeli. Tiga, tentukan kemasan sesuai kebiasaan konsumen segmen itu. Empat, urus legalitas sejak awal. Lima, mulai dari jumlah produksi kecil untuk menguji pasar sebelum menambah.</p>

<h2>Kesalahan yang sering dialami brand baru</h2>
<p>Membuat produk yang ditujukan untuk semua orang sehingga tidak menonjol di satu pun segmen. Memilih rasa berdasarkan selera pribadi, bukan hasil uji ke calon pembeli. Menunda legalitas sampai produk siap. Dan memesan jumlah besar pada produksi pertama sebelum tahu kecepatan penjualannya.</p>

<h2>Pertanyaan yang sering muncul</h2>
<h3>Segmen mana yang paling menjanjikan untuk brand baru?</h3><p>Kebugaran dan kesehatan pencernaan paling ramai, tapi persaingannya ketat. Lansia dan ibu menyusui lebih sepi pesaing, meski kebutuhannya nyata.</p>
<h3>Berapa modal awal untuk memulai?</h3><p>Bergantung pada jumlah produksi minimum dan jenis kemasan. Sebagian brand memulai dari jumlah kecil untuk menguji pasar lebih dulu, lalu menambah setelah responnya jelas.</p>
<h3>Apakah satu formula bisa dipakai untuk beberapa segmen?</h3><p>Bisa, dengan penyesuaian rasa dan kemasan. Namun pesan pemasarannya sebaiknya tetap berbeda per segmen agar tidak membingungkan pembeli.</p>
<h3>Bagaimana menguji pasar sebelum produksi besar?</h3><p>Buat sampel, jual atau bagikan ke calon pembeli di segmen itu, catat respon soal rasa dan kemasan, lalu perbaiki sebelum masuk produksi penuh.</p>
<h3>Apakah legalitas harus diurus sejak awal?</h3><p>Ya. Untuk produk kesehatan, izin edar dan sertifikasi Halal menentukan produk bisa dijual resmi. Mengurusnya belakangan justru menambah biaya dan waktu.</p>
"""



# tambahan isi pilar (dari ys_serbuk_tambahan.py)
_spec = importlib.util.spec_from_file_location("_ysb", os.path.join(os.path.dirname(os.path.abspath(__file__)), "ys_serbuk_tambahan.py"))
_modb = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(_modb)
ISI = ISI.replace('<h2>Pertanyaan yang sering muncul</h2>', _modb.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:
    st, d = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=type,status,title")
    print(f"  #{pid} tipe={d.get('type')} status={d.get('status')} | {str(d.get('title',{}).get('rendered',''))[:46]}")
    if d.get("type") != "post":
        print("  ⛔ ada yang bukan post — dibatalkan"); sys.exit(1)

kata = len(html.unescape(re.sub(r"<[^>]+>", " ", ISI)).split())
print(f"\npilar: {JUDUL}\n  {kata} kata | meta {len(META)} char | fk di awal meta: {META.lower().startswith(FK.lower())}")

if "--apply" not in sys.argv:
    print(f"\nakan di-trash: {BUANG}")
    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 sisi produksinya, lihat <a href="{SERBUK_PROSES}">proses produksi maklon minuman serbuk</a> dan <a href="{PAYUNG_HERBAL}">jasa maklon herbal Sidoarjo</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")
raw = chk["content"]["raw"]
print(f"\nPILAR #{PILAR} POST {st} | {len(html.unescape(re.sub(r'<[^>]+>', ' ', raw)).split())} kata | "
      f"FAQ {raw.count('<h3>')} Q | meta {len(chk['meta'].get('_yoast_wpseo_metadesc',''))}")

print("\nmemindahkan 5 sisanya ke trash:")
for pid in BUANG:
    st2, _ = 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 {st2} | status: {c2.get('status') if isinstance(c2, dict) else c2}")
