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

Catatan:
- 15 Sep 2026 run GAGAL (API call timeout) -> TSLAW/TSC/DAS tidak tayang; hari ini
  dijadwalkan lagi (1 post/hari/akun, mulai hari berikutnya).
- StudioSoft & @ukyhandoko slot 7-harian PENUH (kosong pertama: SS 30 Sep 08:00 WIB,
  uky 3 Okt 05:00 WIB) -> pakai draf backlog (link sudah diverifikasi & belum terpakai);
  script scheduler akan mencatat `no_free_slot` (aturan Bos: jangan paksa/geser).
"""
import json, re, sys

DATE = "2026-09-16"

LINK_SS = "https://studiosoft.id/retainer-digital-marketing/"
LINK_UKY = "https://studiosoft.id/konsultan-ai-surabaya/"
LINK_TSLAW = "https://www.tslaw.id/cara-daftar-hak-cipta-2026/"
LINK_TSC = "https://www.theskincodeclinic.com/kapan-harus-ke-dokter-kulit/"
LINK_DAS = "https://dasindonesia.com/bengkel-buka-hari-minggu-surabaya/"

items = [
    {
        "account": "studiosoft",
        "slot": 11,
        "text": (
            "Banyak pemilik bisnis bertanya ke saya, mengapa hasil promosinya naik-turun tiap bulan? "
            "Jawaban saya biasanya satu: kampanye dijalankan hanya saat ada anggaran.\n\n"
            "Di artikel baru saya, saya uraikan cara kerja retainer digital marketing: apa yang "
            "dikerjakan tiap bulan, bagaimana hasilnya diukur, dan kapan model ini lebih hemat.\n\n"
            f"{LINK_SS}\n\n"
            "Menurut Anda, lebih efektif kampanye musiman atau kerja bulanan? "
            "Tulis pendapat Anda di komentar."
        ),
    },
    {
        "account": "uky",
        "slot": 14,
        "text": (
            "Saya dulu mengira AI hanya relevan untuk perusahaan besar. Setelah saya pakai sendiri untuk "
            "pekerjaan harian, yang berubah bukan alatnya, tapi cara saya bekerja.\n\n"
            "Di artikel baru saya, saya tulis kapan bisnis butuh pendampingan konsultan AI dan kapan "
            "cukup belajar sendiri. AI tidak menggantikan pemilik usaha, ia memberi waktu untuk hal "
            "yang lebih bernilai.\n\n"
            f"{LINK_UKY}\n\n"
            "Di bagian mana bisnis Anda ingin dibantu AI? Ceritakan di kolom komentar."
        ),
    },
    {
        "account": "tslaw",
        "slot": 17,
        "text": (
            "Saya sering bertemu pemilik bisnis yang rajin membuat konten dan desain, tetapi belum "
            "pernah mendaftarkan hak cipta atas karyanya.\n\n"
            "Di artikel baru kami, saya uraikan cara daftar hak cipta: syarat, biaya, dan langkah "
            "resminya di Indonesia. Pendaftaran ini melindungi karya sekaligus menjadi bukti kuat "
            "bila terjadi penjiplakan.\n\n"
            f"{LINK_TSLAW}\n\n"
            "Menurut Anda, karya seperti apa yang paling penting didaftarkan? Tulis pendapat Anda "
            "di kolom komentar."
        ),
    },
    {
        "account": "tsc",
        "slot": 20,
        "text": (
            "Banyak pasien saya mengaku sudah berganti produk skincare berkali-kali, padahal "
            "kulitnya justru butuh pemeriksaan dokter.\n\n"
            "Di artikel baru kami, saya bahas tujuh tanda kulit yang sebaiknya diperiksa dokter "
            "kulit, dari jerawat meradang sampai bercak yang berubah warna. Semakin cepat "
            "diperiksa, semakin sederhana terapinya.\n\n"
            f"{LINK_TSC}\n\n"
            "Setuju? Ceritakan pengalaman kulitmu di kolom komentar."
        ),
    },
    {
        "account": "das",
        "slot": 23,
        "text": (
            "Keluhan yang paling sering saya dengar dari pelanggan: mobil bermasalah justru di "
            "akhir pekan, saat bengkel langganan tutup.\n\n"
            "Di artikel baru kami, saya jelaskan mengapa servis akhir pekan penting bagi pemilik "
            "mobil di Surabaya dan pekerjaan apa saja yang bisa dikerjakan saat bengkel buka "
            "hari Minggu.\n\n"
            f"{LINK_DAS}\n\n"
            "Menurut Anda, sebaiknya bengkel memang buka tiap hari? Tulis pendapat Anda 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 > 500:
        problems.append(f"PANJANG {n}>500")
    if not URL_RE.search(t):
        problems.append("TANPA LINK")
    if not CTA_RE.search(t):
        problems.append("TANPA CTA")
    if MENTION_RE.search(t):
        problems.append("ADA MENTION")
    if "\u2026" in t or re.search(r"\.\.\.", 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))} cta={bool(CTA_RE.search(t))} {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)
