#!/usr/bin/env python3
"""Hapus semua angka harga di Yasmanatura dan Surabaya Skin Centre, ganti kalimat yang setara tanpa angka.

Tanpa argumen = uji. Dengan --go = pasang (dengan cadangan).
"""
import base64, importlib.util, json, sys, time, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"

GANTI = {
    "cfg_yasma.py": [
        (4577, "Contoh: jika HPP per sachet Rp 3.500 dan margin 40%, maka harga jual = Rp 3.500 + Rp 1.400 = Rp 4.900.",
               "Contoh: jika HPP per sachet adalah X dan margin 40%, maka harga jual = X + (X × 40%), atau 1,4 kali HPP."),
        (4577, "<strong>Harga psikologis</strong> — gunakan angka seperti Rp 49.000 daripada Rp 50.000 untuk memberi kesan lebih terjangkau.",
               "<strong>Harga psikologis</strong> — pakai angka yang tidak bulat, karena angka seperti itu terbaca lebih terjangkau daripada angka bulat."),
        (4577, "<tr><th>Komponen</th><th>Biaya per Sachet</th></tr>\n<tr><td>Bahan baku dan produksi maklon</td><td>Rp 2.200</td></tr>\n<tr><td>Kemasan (sachet + dus)</td><td>Rp 700</td></tr>\n<tr><td>Perizinan (BPOM, halal)</td><td>Rp 300</td></tr>\n<tr><td>Pemasaran dan distribusi</td><td>Rp 300</td></tr>\n<tr><td><strong>HPP total</strong></td><td><strong>Rp 3.500</strong></td></tr>",
               "<tr><th>Komponen</th><th>Porsi biaya</th></tr>\n<tr><td>Bahan baku dan produksi maklon</td><td>Porsi terbesar</td></tr>\n<tr><td>Kemasan (sachet + dus)</td><td>Porsi menengah</td></tr>\n<tr><td>Perizinan (BPOM, halal)</td><td>Porsi kecil</td></tr>\n<tr><td>Pemasaran dan distribusi</td><td>Porsi kecil</td></tr>\n<tr><td><strong>HPP total</strong></td><td><strong>Jumlah seluruh komponen</strong></td></tr>"),
        (4577, "Dengan margin 40%, harga jual eceran = Rp 3.500 × 1,4 = <strong>Rp 4.900 per sachet</strong>.",
               "Dengan margin 40%, harga jual eceran dihitung dari HPP ditambah 40% dari HPP itu sendiri."),
        (4577, "Jika dijual dalam paket 10 sachet, harga paket bisa ditetapkan Rp 45.000 (hemat Rp 4.000) untuk mendorong pembelian lebih banyak.",
               "Jika dijual dalam paket 10 sachet, harga paket bisa ditetapkan sedikit di bawah sepuluh kali harga satuan untuk mendorong pembelian lebih banyak."),
        (4577, "Reseller bisa diberi harga grosir Rp 3.900–4.000 per sachet.",
               "Reseller diberi harga grosir yang lebih rendah daripada harga eceran."),
        (4233, "Salah satu contohnya adalah brand minuman kolagen lokal yang memulai dengan modal kurang dari 50 juta rupiah.",
               "Salah satu contohnya adalah brand minuman kolagen lokal yang memulai dengan modal awal yang relatif kecil."),
        (3339, "Misalnya, satu botol susu almond ASI booster di jual dengan harga Rp25.000. Dengan modal produksi sekitar Rp10.000–12.000 per botol, margin yang di dapat bisa mencapai 100% lebih.",
               "Misalnya, satu botol susu almond ASI booster dijual dengan harga yang wajar. Dengan modal produksi per botol yang jauh lebih kecil, margin yang didapat bisa mencapai lebih dari seratus persen dari modal."),
        (3339, "maka omzet bulanannya bisa tembus Rp7,5 juta hingga Rp8 juta. Itu baru dari satu varian produk.",
               "maka omzet bulanannya bisa menembus puluhan juta rupiah. Itu baru dari satu varian produk."),
        (3256, "Terakhir, jadwalkan audit triwulan; UMKM klien Yasma Natura capai Rp100 juta/bulan berkat iterasi data-driven ini.",
               "Terakhir, jadwalkan audit triwulan; beberapa UMKM klien Yasma Natura berhasil menaikkan penjualannya berkat iterasi berbasis data ini."),
        (3256, "Pasar minuman serbuk herbal 2026 di prediksi Rp9 triliun, di dorong e-commerce dan gaya hidup sehat.",
               "Pasar minuman serbuk herbal 2026 diprediksi tumbuh besar, didorong e-commerce dan gaya hidup sehat."),
        (3253, "Tren 2026 prediksi pasar Rp8 triliun, di dorong gaya hidup sehat.",
               "Tren 2026 memprediksi pasar yang tumbuh besar, didorong gaya hidup sehat."),
        (3207, "Paket bundling hemat hingga 20% untuk langganan bulanan. Harga mulai Rp150.000 per box (30 sachet)—investasi kecil untuk kulit premium.",
               "Tersedia paket bundling untuk langganan bulanan. Harganya sebanding dengan manfaat yang didapat untuk perawatan kulit."),
        (3203, "Ini berarti modal awal bisa di tekan di bawah Rp50 juta, termasuk desain label dan uji lab.",
               "Ini berarti modal awal bisa ditekan, termasuk untuk desain label dan uji lab."),
        (3170, "Biaya Rp45.000/kg, sertifikasi Halal-BPOM lengkap.",
               "Biaya produksinya terjangkau, dengan sertifikasi Halal dan BPOM lengkap."),
        (3170, "Kolab KOL fee Rp300rb, target 10k views.",
               "Kolab KOL dengan fee yang disepakati, target 10k views."),
        (3121, "Pelanggan kami sering pilih&nbsp;<strong>maklon minuman alami</strong>&nbsp;karena fleksibel: produksi minimal 100 dus, harga kompetitif mulai Rp50 ribu per dus, dan turnaround 4-6 minggu.",
               "Pelanggan kami sering pilih&nbsp;<strong>maklon minuman alami</strong>&nbsp;karena fleksibel: produksi minimal 100 dus, harga kompetitif, dan turnaround 4-6 minggu."),
        (3121, "Pasar Indonesia prediksi capai Rp5 triliun di 2026, di dorong kesadaran post-pandemi.",
               "Pasar Indonesia diprediksi tumbuh besar di 2026, didorong kesadaran post-pandemi."),
        (3100, "Biaya maklon minuman serbuk collagen mulai Rp15.000-25.000 per sachet, tergantung spesifikasi. Jual eceran Rp35.000-50.000, margin hingga 100%.",
               "Biaya maklon minuman serbuk collagen menyesuaikan spesifikasi yang dipilih. Harga jual ecerannya punya ruang margin yang lebar."),
        (3093, "Contoh budget: Rp25.000-35.000 per botol 250ml (termasuk semua). Diskon volume 10-20% untuk reorder.",
               "Biaya per botol sudah mencakup semua komponen, dan tersedia harga khusus untuk pemesanan ulang dalam jumlah besar."),
        (3093, "Bandingkan dengan bangun pabrik sendiri yang butuh Rp5M+ investasi awal.",
               "Bandingkan dengan membangun pabrik sendiri yang butuh investasi awal jauh lebih besar."),
        (3093, "Hemat biaya notaris Rp10-15juta dan waktu 2 bulan jika urus sendiri.",
               "Hemat biaya notaris dan waktu sekitar dua bulan bila dibanding mengurusnya sendiri."),
        (3093, "Banyak klien Yasma Natura kini omzet Rp50-200juta/bulan dari stevia drink lokal.",
               "Banyak klien Yasma Natura kini menikmati omzet yang tumbuh dari stevia drink lokal."),
        (3085, "Brand pemula tak perlu stok ribuan, cukup pesan 500 pcs dengan modal Rp 10-20 juta.",
               "Brand pemula tak perlu stok ribuan, cukup pesan 500 pcs dengan modal awal yang ringan."),
        (3085, "&#8220;Yasma Natura bantu omzet Rp 50 juta/bulan!&#8221; kata salah satu mitra.",
               "&#8220;Yasma Natura membantu penjualan kami tumbuh!&#8221; kata salah satu mitra."),
        (3082, "Ini beda banget dari pabrik besar yang minta 5.000 pcs, bikin modal awal kamu cuma Rp 10-20 juta saja.",
               "Ini beda banget dari pabrik besar yang minta 5.000 pcs, sehingga modal awalnya jauh lebih ringan."),
        (3065, "Akibatnya, modal awal terjangkau Rp 10-20 juta saja sudah dapat full produksi stevia serbuk.",
               "Akibatnya, modal awal yang terjangkau sudah cukup untuk full produksi stevia serbuk."),
    ],
    "cfg_ssc.py": [
        (3981, "<tr>\n<td><strong>Harga</strong></td>\n<td>Rp50rb &ndash; Rp500rb</td>\n<td>Rp30rb &ndash; Rp150rb (resep)</td>\n</tr>\n", ""),
        (3201, "Lokasi strategis, harga terjangkau mulai Rp500rb/sesi, dan promo paket anti-aging.",
               "Lokasi strategis, biaya yang terjangkau, dan tersedia paket anti-aging."),
        (3174, "Lokasi strategis, harga terjangkau mulai Rp500rb/sesi, dan promo paket anti-aging.",
               "Lokasi strategis, biaya yang terjangkau, dan tersedia paket anti-aging."),
        (3210, "Bandingkan dengan klinik lain, Surabaya Skin Centre unggul di dokter spesialis, layanan terbaiknya, kecanggihan alat serta harga kompetitif—rata-rata 20% lebih murah tanpa kurangi kualitas.",
               "Dibanding klinik lain, Surabaya Skin Centre unggul pada dokter spesialis, layanan, dan kecanggihan alat, dengan biaya yang tetap kompetitif tanpa mengurangi kualitas."),
    ],
}


def ambil(dom, H, pid):
    return json.loads(urllib.request.urlopen(urllib.request.Request(
        f"https://{dom}/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content,link", headers=H), timeout=120).read())


def simpan(dom, H, pid, isi):
    r = urllib.request.Request(f"https://{dom}/wp-json/wp/v2/posts/{pid}",
                               data=json.dumps({"content": isi}).encode(), headers=H, method="POST")
    return urllib.request.urlopen(r, timeout=180).status


GO = "--go" in sys.argv
total, gagal = 0, []
for berkas, daftar in GANTI.items():
    spec = importlib.util.spec_from_file_location("c", f"{WS}/{berkas}")
    mm = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(mm)
    C = mm.CFG
    DOM = C.get("domain", C.get("situs"))
    A = base64.b64encode(f"{C['user']}:{C['pass']}".encode()).decode()
    H = {"Authorization": f"Basic {A}", "User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}
    print(f"\n===== {DOM} =====")
    per_post = {}
    for pid, lama, baru in daftar:
        per_post.setdefault(pid, []).append((lama, baru))
    cadangan = {}
    for pid, isian in per_post.items():
        x = ambil(DOM, H, pid)
        isi = x["content"]["raw"]
        asli = isi
        for lama, baru in isian:
            n = isi.count(lama)
            if n == 1:
                isi = isi.replace(lama, baru)
                total += 1
                print(f"   ok  #{pid} · «{lama[:52]}…»")
            else:
                gagal.append((pid, n, lama))
                print(f"   ⚠   #{pid} · {n}× · «{lama[:52]}…»")
        if GO and isi != asli:
            cadangan[str(pid)] = asli
            print(f"        simpan #{pid}: HTTP {simpan(DOM, H, pid, isi)} · {x['link']}")
            time.sleep(1)
    if GO and cadangan:
        json.dump(cadangan, open(f"{WS}/backup_harga_{berkas.replace('cfg_', '').replace('.py', '')}.json", "w"),
                  ensure_ascii=False)

print(f"\n{'✅' if GO else '(uji)'} {total} penggantian · {len(gagal)} tidak cocok")
if gagal:
    print("tinjau:", [(p, n) for p, n, _ in gagal])
