#!/usr/bin/env python3
"""Generator caption Threads harian 2026-09-27 (validasi keras, tanpa truncate).

Status run 27 Sep 2026 04:00 WIB: SEMUA situs klien (studiosoft.id, tslaw.id,
theskincodeclinic.com, dasindonesia.com) HTTP 404 / connection timeout di 8 node
check-host.net — link TIDAK bisa diverifikasi 200, jadi BELUM dijadwalkan.
File ini menyiapkan kontennya supaya bisa langsung dijalankan begitu situs pulih:

    python3 schedule_all_threads.py threads_content_today.json
"""
import json, re, sys

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

CAPS = [
    {
        "account": "studiosoft", "slot": 11,
        "text": (
            "Saya makin sering ditanya soal SEO versus GEO, dan jawabannya jarang hitam putih.\n"
            "\n"
            "SEO bekerja di mesin pencari, GEO bekerja di jawaban AI. Keduanya butuh bahan yang sama: konten jelas, data yang bisa diverifikasi, dan otoritas yang dibangun konsisten. Bisnis yang menang biasanya menggarap keduanya.\n"
            "\n"
            "https://studiosoft.id/seo-vs-geo-mana-yang-lebih-efektif-untuk-bisnis-di-2026/\n"
            "\n"
            "Menurut Anda, mana dulu yang dibenahi: SEO klasik atau GEO? Komentar di bawah!"
        ),
    },
    {
        "account": "uky", "slot": 14,
        "text": (
            "Saya percaya pemilik bisnis tidak perlu hadir di semua platform. Yang penting hadir di tempat pelanggannya benar-benar mencari.\n"
            "\n"
            "Memilih platform itu keputusan strategis, bukan ikut tren. Saya mulai dari satu pertanyaan: di mana calon pelanggan menghabiskan waktunya, dan konten apa yang membuat mereka percaya.\n"
            "\n"
            "https://studiosoft.id/platform-social-media-mana-yang-cocok-untuk-bisnis-anda/\n"
            "\n"
            "Platform mana yang paling berdampak untuk bisnis Anda? Kasih tahu di komentar ya."
        ),
    },
    {
        "account": "tslaw", "slot": 17,
        "text": (
            "Saya sering menerima pertanyaan soal beda gugatan perdata dan pidana. Keduanya terdengar mirip, padahal jalurnya berbeda.\n"
            "\n"
            "Perdata soal hak dan kewajiban antar pihak, umumnya menuntut ganti kerugian. Pidana menyangkut pelanggaran aturan negara yang berujung sanksi. Salah jalur membuat proses panjang dan mahal.\n"
            "\n"
            "https://www.tslaw.id/3-perbedaan-gugatan-perdata-dan-pidana-yang-perlu-dipahami/\n"
            "\n"
            "Menurut Anda, mana yang paling membingungkan? Tulis pendapatmu di komentar."
        ),
    },
    {
        "account": "tsc", "slot": 20, "allow_if_no_ownlink": True,
        "text": (
            "Saya sering menemui pasien yang kulitnya terasa kendur lebih cepat dari usia seharusnya. Penyebabnya bukan satu produk, tapi kebiasaan yang diulang bertahun-tahun.\n"
            "\n"
            "Kurang tidur, matahari tanpa tabir surya, dan rokok merusak kolagen perlahan. Membenahi kebiasaan ini lebih murah daripada mengejar tindakan peremajaan nanti.\n"
            "\n"
            "https://www.theskincodeclinic.com/kebiasaan-bikin-kulit-kehilangan-kenyal-3/\n"
            "\n"
            "Kebiasaan mana yang paling sulit Anda hindari? Share pengalamanmu di komentar!"
        ),
    },
    {
        "account": "das", "slot": 23,
        "text": (
            "Saya sering melihat mobil masuk bengkel dengan kerusakan besar, padahal gejalanya muncul berbulan-bulan sebelumnya. Penyebabnya sepele: komponen rutin jarang diperiksa.\n"
            "\n"
            "Oli, cairan radiator, kampas rem, filter udara, sampai tekanan ban sebaiknya dicek tiap bulan. Pemeriksaan singkat jauh lebih murah daripada memperbaiki mesin yang rusak.\n"
            "\n"
            "https://dasindonesia.com/komponen-mobil-wajib-diperiksa-bulanan/\n"
            "\n"
            "Komponen mana yang paling sering Anda lupakan? 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,
        "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}")
print("⚠️  BELUM dijalankan ke Repliz — link belum terverifikasi 200 (situs klien down).")
