#!/usr/bin/env python3
"""Generate threads_content_today.json untuk 2026-09-18 + validasi keras.

Catatan (sama pola dgn 17 Sep):
- SS & @ukyhandoko slot 7-harian PENUH (108/111 pending) -> scheduler akan
  mencatat `no_free_slot` (aturan Bos: jangan paksa / jangan geser ke hari lain).
  Isi kelima akun tetap ditulis lengkap supaya file sesuai format wajib.
- Pemilihan 5 link: dicek terhadap (a) log_threads_harian.json (threads_used_links),
  (b) SEMUA description jadwal pending SS/uky dari Repliz API
  (87 URL SS + 76 URL uky) -> kelima link BERSIH di dua set itu.
- Verifikasi HTTP 200 dari host ini (curl --http1.1, studiosoft.id kali ini TIDAK hang).
- Target panjang <=490 char (caption >500 = jadwal PASTI error).
"""
import json, re, sys

DATE = "2026-09-18"
NL = chr(10) + chr(10)   # pemisah paragraf (hindari escape ganda di source)

LINK_SS = "https://studiosoft.id/digital-marketing-agency-surabaya-cara-memilih-partner/"
LINK_UKY = "https://studiosoft.id/otomasi-bisnis-dengan-ai/"
LINK_TSLAW = "https://www.tslaw.id/konsultasi-hukum-kapan-dan-mengapa/"
LINK_TSC = "https://www.theskincodeclinic.com/hal-penting-tentang-eksim-dermatitis-3/"
LINK_DAS = "https://dasindonesia.com/tanda-kompresi-mesin-turun/"


def caption(*parts):
    return NL.join(parts)


items = [
    {
        "account": "studiosoft",
        "slot": 11,
        "text": caption(
            "Saya sering ditanya: di 2026 orang lebih banyak tanya AI daripada buka Google, apakah "
            "SEO masih relevan? Jawaban saya: tetap relevan, tapi aturannya berubah.",
            "Di artikel baru saya, saya uraikan cara memilih partner digital marketing: siapa yang "
            "benar-benar mengerjakan, bukan cuma menjanjikan peringkat nomor satu.",
            LINK_SS,
            "Menurut Anda, apa tanda agency yang layak dipercaya? Tulis pendapat Anda di kolom komentar.",
        ),
    },
    {
        "account": "uky",
        "slot": 14,
        "text": caption(
            "Saya dulu sibuk mengerjakan hal yang sebenarnya bisa diotomatiskan: rekap laporan, "
            "follow-up prospek, sampai penjadwalan konten. Setelah saya rapikan, waktu saya kembali.",
            "Di artikel baru saya, saya tulis tujuh proses bisnis yang paling cepat dihemat dengan AI "
            "dan dari mana sebaiknya mulai. Bukan soal alatnya mahal, tapi cara kerja yang jelas.",
            LINK_UKY,
            "Proses mana di bisnis Anda yang paling ingin diotomatiskan? Ceritakan di kolom komentar.",
        ),
    },
    {
        "account": "tslaw",
        "slot": 17,
        "text": caption(
            "Klien saya sering menunda konsultasi hukum karena takut biayanya mahal. Padahal justru "
            "datang lebih awal yang membuat persoalannya tidak membesar.",
            "Di artikel baru kami, saya jelaskan kapan sebaiknya Anda berkonsultasi dan mengapa "
            "menunggu terlalu lama sering membuat pilihan Anda jadi lebih sempit.",
            LINK_TSLAW,
            "Kapan Anda biasanya memutuskan minta pendapat ahli? Ceritakan di kolom komentar.",
        ),
    },
    {
        "account": "tsc",
        "slot": 20,
        "text": caption(
            "Pasien saya sering mengira kulit kering dan gatal yang berulang itu cuma karena cuaca "
            "atau salah sabun. Padahal itu bisa eksim yang perlu penanganan dokter.",
            "Di artikel baru kami, saya jelaskan lima hal penting soal eksim: pemicunya, alasan tidak "
            "menular, dan kenapa skincare keras justru memperburuk keadaannya.",
            LINK_TSC,
            "Pernah punya kulit kering yang gatal dan berulang? Ceritakan pengalamanmu di kolom komentar.",
        ),
    },
    {
        "account": "das",
        "slot": 23,
        "text": caption(
            "Banyak pemilik mobil merasakan tarikan mulai berat dan bahan bakar makin boros, lalu "
            "menyimpulkan itu soal busi saja. Padahal bisa jadi kompresi mesin yang turun.",
            "Di artikel baru kami, saya bahas tanda-tanda kompresi mesin turun dan cara memastikan "
            "diagnosisnya sebelum bongkar mesin. Deteksi dini jauh lebih murah daripada oversize.",
            LINK_DAS,
            "Keluhan apa yang paling Anda rasakan saat tarikan mobil mulai lemah? Tulis di kolom komentar.",
        ),
    },
]

CTA_RE = re.compile(r"komentar|pendapat|diskusi|setuju|share|pengalaman|menurut", re.I)
MENTION_RE = re.compile(r"@\w+")
URL_RE = re.compile(r"https?://\S+")

data = {"date": DATE, "accounts": []}
ok = True
for it in items:
    t = it["text"]
    n = len(t)
    problems = []
    if n > 490:
        problems.append(f"PANJANG {n}>490")
    if not URL_RE.search(t):
        problems.append("TANPA LINK")
    if not CTA_RE.search(t[-200:]):
        problems.append("TANPA CTA")
    if MENTION_RE.search(t):
        problems.append("ADA MENTION")
    if "\u2026" in t or "..." in t:
        problems.append("ADA ELIPSIS/TRUNCATED")
    if t.count("https://") != 1:
        problems.append("LINK TIDAK TEPAT 1")
    for tag in re.findall(r"#(\w+)", t):
        if tag != tag.lower():
            problems.append("HASHTAG KAPITAL")
    status = "OK  " if not problems else "FAIL"
    if problems:
        ok = False
    print(f"{status} {it['account']:11s} len={n:3d} url={bool(URL_RE.search(t))} "
          f"cta_tail={bool(CTA_RE.search(t[-200:]))} {problems}")
    data["accounts"].append(it)

out = "/home/mantapman/.hermes/profiles/atun/workspace/threads_content_today.json"
with open(out, "w") as f:
    json.dump(data, f, indent=2, ensure_ascii=False)
print("tulis ->", out)
sys.exit(0 if ok else 1)
