#!/usr/bin/env python3
"""Hapus semua penyebutan harga di artikel TSC, ganti dengan kalimat yang setara tanpa angka.

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

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)
C = m.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"}

GANTI = [
    (8376, "Bahkan, konsultasi awal Rp50.000 sudah termasuk pemeriksaan menyeluruh.",
           "Bahkan, konsultasi awal sudah termasuk pemeriksaan menyeluruh."),
    (8376, "Paket lengkap mulai Rp200.000/sesi, termasuk skincare post-treatment.",
           "Paket lengkap tersedia per sesi, termasuk skincare post-treatment."),
    (8376, "Harga kompetitif—paket dermatologi Rp1.5jt/10 sesi lebih murah 30% dari Surabaya.",
           "Paket dermatologi tersedia dalam bentuk paket sesi dengan biaya yang bersaing dibanding klinik di Surabaya."),
    (8376, "Promo dokter baru diskon 50% konsultasi pertama tarik 200 pasien/bulan.",
           "Promo dokter baru untuk konsultasi pertama ikut menambah jumlah pasien baru."),
    (8374, "Harga terjangkau juga jadi daya tarik—konsultasi awal hanya Rp50.000.",
           "Biaya yang terjangkau juga jadi daya tarik, terutama untuk konsultasi awal."),
    (8374, "Karena itu, paket jerawat kami populer, mulai Rp150.000/sesi.",
           "Karena itu, paket jerawat kami termasuk yang paling banyak dipilih pasien."),
    (8374, "Promo spesial bulanan seperti diskon 30% paket jerawat atau gratis tes IMS pertama tarik banyak pasien baru.",
           "Promo bulanan seperti potongan biaya paket jerawat atau tes IMS pertama tanpa biaya ikut menarik pasien baru."),
    (8372, "Selain itu, kami tawarkan paket perawatan jerawat yang terjangkau, mulai Rp150.000 per sesi.",
           "Selain itu, kami tawarkan paket perawatan jerawat dengan biaya yang terjangkau."),
    (8372, "Harga transparan, tanpa biaya tersembunyi—konsultasi awal hanya Rp50.000.",
           "Biaya disampaikan terbuka sejak awal, tanpa biaya tersembunyi."),
    (8372, "Selain itu, promo bulanan seperti diskon 20% jerawat package atau gratis tes IMS pertama.",
           "Selain itu, ada promo bulanan untuk paket jerawat dan tes IMS pertama tanpa biaya."),
    (2007, "Selain itu, biaya terjangkau mulai Rp150.000 per konsultasi, jauh lebih hemat daripada pengobatan trial-error di apotek.",
           "Selain itu, biaya konsultasinya jauh lebih hemat daripada pengobatan coba-coba di apotek."),
    (2007, "Konsultasi pertama gratis, promo diskon 20% untuk warga Krian hingga akhir bulan.",
           "Konsultasi pertama tanpa biaya, plus promo bulanan untuk warga Krian."),
    (2002, "Harga konsultasi Rp100.000-300.000 wajar di Krian, tapi jangan tergiur murah tanpa hasil.",
           "Harga konsultasi di Krian bervariasi, jadi jangan tergiur murah tanpa hasil."),
    (2002, "Dr. Avril di The Skin Code Clinic tawarkan Rp150.000 plus paket skincare berminyak (cleanser salisilat + serum niacinamide) Rp500.000/bulan, hasil kelihatan minggu pertama.",
           "Dr. Avril di The Skin Code Clinic menawarkan konsultasi plus paket skincare untuk kulit berminyak (cleanser salisilat dan serum niacinamide), dengan biaya yang disampaikan saat konsultasi."),
    (1997, "Biaya konsultasi hanya Rp150.000, review Google 4.9/5 dari 250+ pasien setia",
           "Biaya konsultasinya terjangkau, review Google 4.9/5 dari 250+ pasien setia"),
    (1997, "Tarif Rp200.000, rating 4.8.", "Tarifnya terjangkau, rating 4.8."),
    (1997, "Konsultasi Rp100.000 (non-BPJS), skor 4.7.", "Konsultasi tersedia untuk pasien non-BPJS, skor 4.7."),
    (1997, "Harga Rp250.000, 4.9 rating.", "Tarifnya terjangkau, 4.9 rating."),
    (1997, "Biaya Rp180.000, review 4.8 dari 150 pasien.", "Biaya terjangkau, review 4.8 dari 150 pasien."),
    (1997, "Tarif Rp220.000, 4.7 rating.", "Tarif terjangkau, 4.7 rating."),
    (1997, "Konsultasi Rp160.000, skor 4.9.", "Konsultasi terjangkau, skor 4.9."),
    (1997, "Harga Rp190.000, rating 4.8.", "Tarif terjangkau, rating 4.8."),
    (1997, "Biaya Rp230.000, 4.9 dari 300+ review.", "Biaya terjangkau, 4.9 dari 300+ review."),
    (1997, "Tarif Rp260.000, rating 4.9 dari 180 pasien.", "Tarif terjangkau, rating 4.9 dari 180 pasien."),
    (1986, "Satu sesi Rp400.000, efeknya langsung kelihatan!", "Hasilnya mulai terlihat sejak sesi pertama."),
    (1986, "Paket 4 minggu cuma Rp1,5 juta—value banget!", "Paket 4 minggu jadi pilihan yang paling sering diambil pasien."),
    (1986, "Dokter ahli, alat impor Korea-Jepang, harga 30% lebih murah dari Surabaya.",
           "Dokter ahli dan alat impor Korea-Jepang, dengan biaya yang lebih bersaing dari klinik di Surabaya."),
    (1983, "Biaya terjangkau, mulai Rp300.000.", "Biaya terjangkau."),
    (1983, "Mereka fokus pada hasil nyata dengan harga ramah kantong (paket jerawat mulai Rp1 juta untuk 5 sesi).",
           "Mereka fokus pada hasil nyata dengan biaya yang ramah kantong, termasuk paket jerawat beberapa sesi."),
    (1973, "Konsultasi dokter kulit mulai Rp100-200 ribu, jauh lebih murah daripada bolak-balik beli skincare gagal yang bisa Rp1-2 juta sebulan.",
           "Konsultasi dokter kulit jauh lebih murah daripada bolak-balik membeli skincare yang akhirnya tidak cocok."),
    (1973, "Jerawat polos Rp150 ribu udah beres, nggak eksklusif buat selebgram.",
           "Jerawat biasa bisa ditangani dengan biaya yang terjangkau, tidak eksklusif buat selebgram."),
    (1939, "Konsultasi terdekat di The Skin Code Clinic Krian mulai Rp150.000, paket lengkap Rp750.000 termasuk tes lab.",
           "Konsultasi terdekat di The Skin Code Clinic Krian tersedia, termasuk paket lengkap dengan tes lab."),
    (1930, "Skincare Rp500 ribu/bulan belum tentu hilangkan bopeng, PRP sekali sesi sudah beri efek regenerasi permanen.",
           "Skincare rutin belum tentu menghilangkan bopeng, sementara PRP bekerja merangsang regenerasi kulit dari dalam."),
    (1918, "Mulai Rp1.200.000/sesi.", "Biaya per sesi disampaikan saat konsultasi."),
    (1901, "The Skin Code Clinic Krian tawarkan paket mulai Rp800.000, termasuk skincare kit.",
           "The Skin Code Clinic Krian menawarkan paket perawatan, termasuk skincare kit."),
]


def ambil(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(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
per_post = {}
for pid, lama, baru in GANTI:
    per_post.setdefault(pid, []).append((lama, baru))

cadangan, dipasang, tidak_cocok = {}, 0, []
for pid, daftar in per_post.items():
    x = ambil(pid)
    isi = x["content"]["raw"]
    asli = isi
    for lama, baru in daftar:
        n = isi.count(lama)
        if n == 1:
            isi = isi.replace(lama, baru)
            dipasang += 1
            print(f"   ok  #{pid} · «{lama[:58]}…»")
        else:
            tidak_cocok.append((pid, n, lama))
            print(f"   ⚠   #{pid} · ditemukan {n}× · «{lama[:58]}…»")
    if GO and isi != asli:
        cadangan[str(pid)] = asli
        print(f"        simpan #{pid}: HTTP {simpan(pid, isi)} · {x['link']}")
        time.sleep(1)

if GO:
    json.dump(cadangan, open(f"{WS}/tsc_backup_harga.json", "w"), ensure_ascii=False)
print(f"\n{'✅' if GO else '(uji)'} {dipasang} penggantian dipasang · {len(tidak_cocok)} tidak cocok")
if tidak_cocok:
    print("perlu ditinjau:", [(p, n) for p, n, _ in tidak_cocok])
