#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Rapikan 3 jadwal TS Law (video tanah waris) supaya pas aturan Meta + ramah pencarian.

Yang diubah:
  - caption: hook memuat frasa kunci, hashtag dipangkas jadi 5
  - alt text media: deskriptif (aksesibilitas + penemuan)
  - judul: memuat pertanyaan yang dicari orang
  - FB: type video -> reel (jangkauan Reels lebih besar; di akun ini tipe reel sudah 4x sukses)
  - IG tetap type video (video vertikal 9:16 tetap disajikan sebagai Reels oleh Instagram)

Pakai: python3 rapikan_video_tslaw_meta_seo.py         (dry run)
       python3 rapikan_video_tslaw_meta_seo.py --run   (eksekusi)
"""
import json
import re
import sys
import urllib.request

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE  # noqa: E402

FN = "tslaw_video_tanah_waris_1009_4k_h264.mp4"
URL = "https://mantapserver.tail3947bb.ts.net/openclaw-img/" + FN
ALT = ("Video edukasi hukum TS Law: jual beli tanah waris tanpa persetujuan seluruh ahli waris "
       "bisa dibatalkan, dasar putusan Mahkamah Agung Nomor 3236 K/PDT/1989")
JUDUL = "TS Law — Tanah Waris Dijual Tanpa Persetujuan Ahli Waris, Bisa Dibatalkan?"
TOPIC = "Hukum Pertanahan"

CAP = """Tanah waris dijual tanpa persetujuan semua ahli waris? Jual belinya bisa dibatalkan walau sudah lewat notaris dan PPAT. ⚖️

Coba bayangkan: tanah warisan sudah dibeli, akta sudah ditandatangani di hadapan notaris, sertifikat sudah pindah nama. Beberapa waktu kemudian muncul seorang ahli waris yang mengaku tidak pernah dilibatkan, dan dia tidak setuju tanah itu dijual.

Kalau benar ada ahli waris yang tidak diajak bicara, jual beli tanah waris itu bisa dibatalkan. Sertifikat yang sudah terbit pun bisa ikut dipersoalkan.

Ini bukan soal pembeli telat bayar, bukan juga soal dokumennya palsu. Yang jadi masalah: warisan itu belum dibagi, jadi tanah masih milik bersama para ahli waris. Menjualnya butuh persetujuan semuanya, bukan hanya satu orang.

Dasarnya adalah putusan Mahkamah Agung Nomor 3236 K/PDT/1989. Putusan itu jadi acuan: jual beli tanah warisan yang belum dibagi, yang dilakukan satu ahli waris tanpa persetujuan ahli waris lain, tidak sah, walaupun prosedurnya sudah dijalankan lengkap.

Jadi kalau kamu mau beli tanah waris, jangan berhenti di pertanyaan "sertifikatnya ada?". Tanyakan juga siapa saja ahli warisnya, apakah warisan sudah dibagi, dan apakah semuanya sudah memberi persetujuan.

Simak penjelasan lengkapnya di video ini ya.

Catatan kecil: konten ini edukasi umum, bukan nasihat hukum untuk kasus tertentu.

Kalau kamu pernah beli tanah waris, bagian mana yang paling sering dilewatkan saat memeriksa dokumennya? Tulis di komentar 👇

#tanahwaris #jualbelitanah #hukumpertanahan #hukumperdata #titosupriantolawfirm"""

# (label, id, type baru, judul baru)
UBAH = [
    ("Threads teks", "6ac86d8a411e0d496406f3d7", None, None),
    ("IG video", "6ac86d89297a8762543bd68a", "video", JUDUL),
    ("FB video", "6ac86d89297a8762543bd6a6", "reel", JUDUL),
]
MODE = "run" if "--run" in sys.argv else "dry"
CTA_RE = re.compile(r"komentar|diskusi|pendapat|tulis di|share|pengalaman|menurut (kamu|anda)", re.I)
CJK_RE = re.compile(r"[\u3000-\u303f\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uac00-\ud7af]")

assert len(CAP) <= 2200, f"caption kepanjangan: {len(CAP)}"
assert "@" not in CAP, "ada mention"
assert CTA_RE.search(CAP[-160:]), "CTA hilang di ekor"
assert not [t for t in re.findall(r"#(\w+)", CAP) if t != t.lower()], "hashtag huruf besar"
assert not CJK_RE.search(CAP), "ada CJK"
N_HASHTAG = len(re.findall(r"#(\w+)", CAP))
print(f"caption baru: {len(CAP)} char | hashtag {N_HASHTAG} | ALT {len(ALT)} char")
print(f"hook (125 char pertama): {CAP[:125]!r}")


def ambil(sid):
    return json.load(urllib.request.urlopen(urllib.request.Request(
        f"{BASE}/public/schedule/{sid}", headers=HEADERS), timeout=60))


for label, sid, tipe_baru, judul_baru in UBAH:
    j = ambil(sid)
    media = j.get("medias") or []
    for m in media:
        m["alt"] = ALT
    payload = {
        "accountId": j.get("accountId"),
        "title": judul_baru or j.get("title") or "",
        "description": CAP if media else (j.get("description") or ""),
        "topic": TOPIC if media else (j.get("topic") or ""),
        "type": tipe_baru or j.get("type"),
        "medias": media,
        "scheduleAt": j.get("scheduleAt"),
        "replies": j.get("replies") or [],
    }
    print(f"\n{label} id={sid}")
    print(f"  type {j.get('type')} -> {payload['type']} | judul -> {payload['title'][:55]}")
    print(f"  caption {len(j.get('description') or '')} -> {len(payload['description'])} char "
          f"| media {len(media)} | alt {len(ALT)} char")
    if MODE != "run":
        continue
    req = urllib.request.Request(f"{BASE}/public/schedule/{sid}",
                                 data=json.dumps(payload).encode(),
                                 headers={**HEADERS, "Content-Type": "application/json"},
                                 method="PUT")
    try:
        with urllib.request.urlopen(req, timeout=60) as r:
            kode = r.status
        b = ambil(sid)
        bm = (b.get("medias") or [{}])[0]
        print(f"  OK http {kode} | baca-balik: {b.get('status')} {b.get('type')} "
              f"| caption {len(b.get('description') or '')} char | alt={str(bm.get('alt'))[:40]} "
              f"| judul {str(b.get('title'))[:45]}")
    except Exception as e:
        body = getattr(e, "read", lambda: b"")()
        print(f"  GAGAL: {e} {body[:200]}")
