#!/usr/bin/env python3
"""Generator caption Threads harian 2026-09-25 (validasi keras, tanpa truncate)."""
import json, re, sys

DATE = "2026-09-25"
OUT = "/home/mantapman/.hermes/profiles/atun/workspace/threads_content_today.json"

CAPS = [
    {
        "account": "studiosoft", "slot": 11,
        "text": (
            "Saya sering ditanya apakah AI akan menggantikan digital marketer. Menurut saya yang berubah bukan profesinya, tapi cara kerjanya.\n"
            "\n"
            "Riset kata kunci, laporan, sampai variasi konten kini jauh lebih cepat. Yang tetap manusiawi adalah strategi dan keputusan soal brand.\n"
            "\n"
            "https://studiosoft.id/ai-dan-pekerjaan-digital-marketer-apa-yang-berubah/\n"
            "\n"
            "Menurut Anda, bagian kerja marketer mana yang paling aman dari AI? Tulis pendapatmu di komentar."
        ),
    },
    {
        "account": "uky", "slot": 14,
        "text": (
            "Saya percaya bisnis yang naik kelas bukan yang paling ramai beriklan, tapi yang paling jelas mau dikenal sebagai apa.\n"
            "\n"
            "Pengalaman membangun tim mengajarkan saya bahwa strategi yang rapi menghemat tenaga, karena setiap konten punya arah. Tanpa itu kita sibuk tiap hari tapi tidak tumbuh.\n"
            "\n"
            "https://studiosoft.id/digital-marketing-surabaya-strategi-jitu-bisnis-naik-kelas/\n"
            "\n"
            "Menurut Anda, langkah pertama yang paling penting agar bisnis naik kelas? Komentar di bawah ya."
        ),
    },
    {
        "account": "tslaw", "slot": 17,
        "text": (
            "Saya sering bertemu orang yang sudah lunas membayar, tapi tanahnya bermasalah karena hal yang dilewati saat transaksi.\n"
            "\n"
            "Cek keaslian sertifikat dan riwayat kepemilikan, lalu pastikan bebas sengketa. Tulis perjanjian di hadapan pejabat berwenang, agar repot di awal tidak menjadi perkara panjang.\n"
            "\n"
            "https://www.tslaw.id/7-langkah-aman-jual-beli-tanah-secara-hukum-agar-tidak-sengketa-di-kemudian-hari/\n"
            "\n"
            "Setuju cek dokumen lebih penting dari harga murah? Kasih tahu di komentar."
        ),
    },
    {
        "account": "tsc", "slot": 20, "allow_if_no_ownlink": True,
        "text": (
            "Saya sering menemui pasien dengan kulit kering, bersisik, dan terasa tertarik usai cuci muka. Kulit kering bukan sekadar soal penampilan.\n"
            "\n"
            "Pemicunya sering sepele: mandi air panas, sabun terlalu keras, atau produk aktif tanpa pendampingan. Solusinya bukan menumpuk produk baru, tapi membenahi pelembap.\n"
            "\n"
            "https://www.theskincodeclinic.com/penyebab-kulit-kering-bersisik-dan-solusinya-3/\n"
            "\n"
            "Pernah alami kulit kering bersisik yang sulit hilang? Ceritakan di komentar!"
        ),
    },
    {
        "account": "das", "slot": 23,
        "text": (
            "Saya sering mendengar pemilik mobil mengeluh AC tiba-tiba tidak dingin, padahal servis rutin tetap jalan. Masalah ini jarang datang tanpa tanda.\n"
            "\n"
            "Penyebab paling umum adalah freon berkurang, kompresor melemah, kondensor kotor, atau filter kabin tersumbat. Sebagian cukup dengan perawatan rutin, tapi bila dibiarkan kerusakannya merembet.\n"
            "\n"
            "https://dasindonesia.com/penyebab-ac-mobil-tidak-dingin/\n"
            "\n"
            "AC mobil Anda pernah bermasalah di tengah perjalanan? Ceritakan di kolom komentar!"
        ),
    },
]

MENTION = re.compile(r"@\w+")
URL = re.compile(r"https?://\S+")
CTA = re.compile(r"(komentar|pendapatmu|pengalamanmu|kasih tahu|share|ceritakan)", re.I)

errs = []
for c in CAPS:
    t = c["text"]
    n = len(t)
    checks = {
        "len<=500": n <= 500,
        "len<=490": n <= 490,
        "ada_link": bool(URL.search(t)),
        "ada_CTA": bool(CTA.search(t[-220:])),
        "0_mention": not MENTION.search(t),
        "pakai_saya": "saya" in t.lower(),
        "tanpa_elipsis": "..." not in t,
        "hashtag_lowercase": all(x == x.lower() for x in re.findall(r"#(\w+)", t)),
        "min_2_paragraf": t.count("\n\n") >= 2,
        "min_5_kalimat": t.count(".") + t.count("?") >= 5,
    }
    bad = [k for k, v in checks.items() if not v]
    print(f"{c['account']:11s} len={n:4d} {'OK' if not bad else 'GAGAL: ' + ','.join(bad)}")
    if bad:
        errs.append((c["account"], bad))

if errs:
    print("\n❌ Validasi gagal:", errs)
    sys.exit(1)

json.dump({"date": DATE, "accounts": CAPS}, open(OUT, "w"), ensure_ascii=False, indent=1)
print(f"\n✅ Semua validasi lolos → {OUT}")
