#!/usr/bin/env python3
"""Tampilkan kalimat lengkap di sekitar penyebutan harga, supaya bisa dinilai mana yang harga jasa klien."""
import base64, importlib.util, json, os, re, sys, time, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
HARGA = re.compile(r"(Rp\s?[\d][\d.,]*|IDR\s?[\d][\d.,]*|\b\d+\s?(?:juta|ribu|jt|rb)\b|"
                   r"diskon\s+\d+\s?%|potongan\s+\d+\s?%)", re.I)
SITUS = [("TSLaw", "cfg_tslaw.py"), ("The Skin Code", "cfg_tsc.py")] if "--tsc-tslaw" in sys.argv else \
        [("TSLaw", "cfg_tslaw.py"), ("The Skin Code", "cfg_tsc.py"), ("DAS", "cfg_das.py"),
         ("Yasmanatura", "cfg_yasma.py"), ("Surabaya Skin Centre", "cfg_ssc.py"),
         ("EveryBe", "cfg_everybe.py"), ("DMark", "cfg_dmark.py"), ("Abimata", "cfg_abimata.py"),
         ("Kendangsari", "cfg_rsia.py")]


def bersih(html):
    t = re.sub(r"<script.*?</script>|<style.*?</style>", " ", html, flags=re.S | re.I)
    t = re.sub("<[^>]+>", " ", t)
    t = t.replace("&nbsp;", " ").replace("&#8211;", "-").replace("&amp;", "&")
    return re.sub(r"\s+", " ", t).strip()


hasil = {}
for nama, berkas in SITUS:
    f = f"{WS}/{berkas}"
    if not os.path.exists(f):
        continue
    spec = importlib.util.spec_from_file_location("c", f)
    mm = importlib.util.module_from_spec(spec)
    try:
        spec.loader.exec_module(mm)
        C = mm.CFG
    except Exception:
        continue
    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"}
    print(f"\n===== {nama} ({dom}) =====")
    semua = []
    for jenis in ("posts", "pages"):
        hal = 1
        while hal <= 4:
            u = (f"https://{dom}/wp-json/wp/v2/{jenis}?per_page=100&page={hal}"
                 "&status=publish,draft,future&context=edit&_fields=id,link,content,status")
            try:
                d = json.loads(urllib.request.urlopen(urllib.request.Request(u, headers=H), timeout=180).read())
            except Exception:
                break
            if not isinstance(d, list) or not d:
                break
            for x in d:
                teks = bersih(x["content"]["raw"])
                for mo in HARGA.finditer(teks):
                    mulai = max(0, mo.start() - 130)
                    akhir = min(len(teks), mo.end() + 130)
                    semua.append((x["id"], x["status"], x["link"], mo.group(0), teks[mulai:akhir]))
            if len(d) < 100:
                break
            hal += 1
    hasil[nama] = semua
    for pid, st, link, angka, kalimat in semua[:14]:
        print(f"   #{pid} [{st}] «{angka}»")
        print(f"        …{kalimat.strip()[:250]}…")
    print(f"   total temuan: {len(semua)}")

json.dump(hasil, open(f"{WS}/drafts/audit_harga_kalimat.json", "w"), ensure_ascii=False, indent=1)
print("\n→ drafts/audit_harga_kalimat.json")
