#!/usr/bin/env python3
"""TSLaw perbaikan harian #1 (post 3230) — selaraskan judul/meta dengan kueri nyata + tambah isi.
Jalankan tanpa argumen = dry run. Dengan --apply = tulis via REST (JSON) + verifikasi baca ulang."""
import base64, json, re, sys, time, urllib.request, urllib.error, importlib.util, os

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
OUT = f"{WS}/tslaw_pemulihan/perbaikan_20261002"
os.makedirs(OUT, exist_ok=True)
PID = 3230
SPEC = importlib.util.spec_from_file_location("cfg_tslaw", f"{WS}/cfg_tslaw.py")
m = importlib.util.module_from_spec(SPEC); SPEC.loader.exec_module(m)
AUTH = base64.b64encode(f'{m.CFG["user"]}:{m.CFG["pass"]}'.encode()).decode()
H = {"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0",
     "Content-Type": "application/json"}


def rest(path, data=None, method=None):
    req = urllib.request.Request(f"https://www.tslaw.id{path}", headers=H,
                                 data=json.dumps(data).encode() if data else None, method=method)
    for i in range(3):
        try:
            with urllib.request.urlopen(req, timeout=150) as x:
                return json.loads(x.read()), x.status
        except urllib.error.HTTPError as e:
            return {"err": e.code, "body": e.read()[:400].decode(errors="replace")}, e.code
        except Exception as e:
            last = str(e); time.sleep(5)
    return {"err": last}, 0


GET = f"/wp-json/wp/v2/posts/{PID}?context=edit"
p, st = rest(GET)
if st != 200:
    print("GAGAL baca:", p); sys.exit(1)
raw = p["content"]["raw"]
kata_lama = len(re.sub(r"<[^>]+>", " ", raw).split())

# ---------- isi tambahan ----------
BIAYA_PAR = ("<p>Biaya pembuatan surat wasiat bervariasi tergantung jenis wasiat dan notaris yang dipilih. "
             "Untuk wasiat olografis yang didaftarkan ke notaris, biaya sekitar Rp1-3 juta. Wasiat terbuka atau rahasia "
             "bisa mencapai Rp3-10 juta tergantung kompleksitas harta.</p>")
assert raw.count(BIAYA_PAR) == 1, "paragraf biaya tidak unik/tidak ada"

BIAYA_BARU = BIAYA_PAR + """
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Berapa biaya buat surat wasiat di notaris?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Untuk wasiat olografis yang Anda tulis sendiri lalu dititipkan, biaya yang perlu disiapkan umumnya Rp1.000.000 sampai Rp3.000.000. Kalau memilih wasiat terbuka atau wasiat rahasia yang dibuat dalam bentuk akta notaris, kisarannya Rp3.000.000 sampai Rp10.000.000. Angka ini gambaran umum dari penanganan klien di Surabaya, bukan tarif resmi. Honor notaris lahir dari kesepakatan para pihak, jadi tiap kantor bisa memberi penawaran yang berbeda.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Yang membuat biayanya naik turun</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Jenis wasiat. Wasiat olografis paling hemat karena hanya dititipkan, sementara wasiat terbuka dan rahasia wajib berbentuk akta notaris.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Jumlah dan nilai harta. Semakin banyak bidang tanah, deposito, atau saham yang disebut, semakin panjang akta yang harus disusun.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Jumlah penerima wasiat. Setiap nama yang dimasukkan menambah dokumen identitas yang perlu diverifikasi notaris.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Domisili notaris. Tarif di kota besar biasanya lebih tinggi dibanding kantor notaris di daerah.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Pendampingan advokat. Bagian ini menambah biaya, tetapi membantu memastikan wasiat tidak menabrak hak ahli waris legitimaris.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Sebelum akta dibuat, minta rincian biaya secara tertulis. Anda jadi tahu berapa yang dibayar di muka, berapa di akhir, dan apa saja yang sudah termasuk di dalamnya.</p>"""
raw = raw.replace(BIAYA_PAR, BIAYA_BARU, 1)

# ---------- bagian baru: tanpa notaris ----------
BIAYA_H2 = "<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Biaya Pembuatan Surat Wasiat</h2>"
assert raw.count(BIAYA_H2) == 1, "heading biaya tidak unik"

TANPA_NOTARIS = """<!-- wp:heading -->
<h2 class="wp-block-heading">Cara Membuat Surat Wasiat Tanpa Notaris</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Surat wasiat tidak selalu harus dibuat di hadapan notaris. Jalur yang dipakai adalah wasiat olografis, yaitu wasiat yang seluruh isinya ditulis dan ditandatangani sendiri oleh pewaris. Dasar hukumnya Pasal 932 KUHPerdata.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Syarat tanpa notaris ini punya satu konsekuensi yang sering terlewat: setelah ditulis, wasiat olografis sebaiknya tetap dititipkan ke notaris agar tercatat dan bisa ditemukan saat dibutuhkan. Wasiat yang disimpan sendiri di rumah berisiko hilang, disembunyikan pihak lain, atau dipertanyakan keasliannya oleh ahli waris.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Langkah praktisnya</h3>
<!-- /wp:heading -->

<!-- wp:list {"ordered":true} -->
<ol class="wp-block-list"><!-- wp:list-item -->
<li>Tulis seluruh isi wasiat dengan tangan sendiri. Tidak boleh diketik, karena syarat olografis melekat pada tulisan tangan pewaris.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Bubuhkan tanda tangan di bagian akhir dan cantumkan tanggal pembuatan.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Masukkan ke amplop tertutup, lalu titipkan ke notaris dan minta tanda bukti penyimpanan.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Beri tahu satu atau dua orang terpercaya soal keberadaan wasiat supaya tidak ada yang mengklaim tidak tahu.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Simpan fotokopi untuk arsip pribadi, dan minta legalisasi salinan bila perlu.</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Kalau harta Anda tergolong sederhana dan tidak ada potensi sengketa, jalur ini cukup. Namun begitu ada beberapa bidang tanah, saham, atau hubungan keluarga yang rumit, akta notaris lebih aman karena sejak awal ada pihak netral yang mencatat kehendak Anda.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Konsultasi lebih dulu sebelum menulis apa pun. Satu jam membahas jenis wasiat dan daftar harta jauh lebih murah dibanding sengketa warisan yang berlarut-larut.</p>
<!-- /wp:paragraph -->

"""
raw = raw.replace(BIAYA_H2, TANPA_NOTARIS + BIAYA_H2, 1)

# ---------- perbaikan kecil di dalam teks yang sama ----------
assert raw.count("TTA Law Firm") == 1, "nama kantor tidak ditemukan"
raw = raw.replace("TTA Law Firm", "TS Law Firm", 1)

# ---------- judul & meta selaras kueri ----------
JUDUL_H1 = "Cara Membuat Surat Wasiat yang Sah & Berapa Biaya di Notaris"
JUDUL_SEO = "Cara Membuat Surat Wasiat & Berapa Biaya di Notaris 2026"
FOKUS = "cara membuat surat wasiat"
METADESC = ("Cara membuat surat wasiat yang sah, plus berapa biaya buat surat wasiat di notaris. "
            "Syarat, langkah, sampai opsi tanpa notaris. Konsultasi gratis.")
assert 120 <= len(METADESC) <= 158, f"panjang metadesc {len(METADESC)}"
assert METADESC.startswith("Cara membuat surat wasiat"), "metadesc harus mulai dari fokus"
assert FOKUS in METADESC.lower() or FOKUS in METADESC
assert JUDUL_SEO.lower().count("cara membuat surat wasiat") == 1
assert len(JUDUL_SEO) <= 61, len(JUDUL_SEO)

kata_baru = len(re.sub(r"<[^>]+>", " ", raw).split())
print(f"panjang metadesc : {len(METADESC)} char")
print(f"panjang judul SEO: {len(JUDUL_SEO)} char")
print(f"kata {kata_lama} -> {kata_baru}")
for wajib in ["wa.me/6281909222026", "FAQPage", "law-firm-surabaya", "<h2", "Berapa biaya buat surat wasiat di notaris?"]:
    print(f"  {wajib:<45} : {raw.count(wajib)}x")
sisa = re.findall(r"\{[A-Za-z_\[\]0-9]+\}", raw)
print("placeholder tersisa :", sisa or "tidak ada")
open(f"{OUT}/post_3230_sesudah_draft.txt", "w").write(raw)
print("→ draft:", f"{OUT}/post_3230_sesudah_draft.txt")

if "--apply" not in sys.argv:
    print("\n(dry run — belum menulis ke REST)")
    sys.exit(0)

# ---------- tulis ----------
body = {"title": JUDUL_H1, "content": raw,
        "meta": {"_yoast_wpseo_focuskw": FOKUS, "_yoast_wpseo_title": JUDUL_SEO,
                 "_yoast_wpseo_metadesc": METADESC}}
r, st = rest(f"/wp-json/wp/v2/posts/{PID}", body, method="POST")
print("POST:", st)
if st != 200:
    print("GAGAL:", r); sys.exit(1)

# ---------- verifikasi baca ulang ----------
time.sleep(3)
q, st2 = rest(GET)
print("BACA ULANG:", st2)
mt = q.get("meta") or {}
hasil = {"judul_api": q["title"]["raw"], "seo_title": mt.get("_yoast_wpseo_title"),
         "focuskw": mt.get("_yoast_wpseo_focuskw"), "metadesc": mt.get("_yoast_wpseo_metadesc"),
         "kata": len(re.sub(r"<[^>]+>", " ", q["content"]["raw"]).split()),
         "ada_tanpa_notaris": "Cara Membuat Surat Wasiat Tanpa Notaris" in q["content"]["raw"],
         "modified": q["modified"]}
for k, v in hasil.items():
    print(f"  {k:<20}: {str(v)[:110]}")
json.dump(hasil, open(f"{OUT}/post_3230_verifikasi.json", "w"), indent=1, ensure_ascii=False)
