#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Generator caption Threads 4 Okt 2026 (uky, tsc, das) → threads_content_today.json.

Aturan: <=478 char, ada link, >=5 kalimat, CTA komentar, hashtag huruf kecil,
tanpa @mention, tanpa CJK. tslaw & studiosoft di-SKIP (sudah ada jadwal same-day
ber-link website sendiri → guard maks 1 post/hari/akun).
"""
import json, re

DATE = "2026-10-04"

VAR = {
"uky": [
"""Saya sering ditanya: boleh tidak pakai AI untuk bikin konten? Jawaban saya: boleh, asal tahu batasnya.

AI saya pakai untuk cari ide dan merapikan tulisan. Yang tidak saya serahkan: pengalaman dan opini yang cuma saya punya.

Artikel ini membahas batas sehatnya.

https://studiosoft.id/bikin-konten-pakai-ai-boleh-asal-tahu-batasnya/

Bagian mana konten Anda yang dibantu AI? Tulis di komentar ya.

#ai #konten #personalbranding""",
],
"tsc": [
"""Banyak pasien saya baru periksa setelah gejalanya mengganggu. Padahal penyakit menular seksual sering berjalan tanpa tanda di awal.

Pencegahan tetap cara paling murah: saling terbuka dengan pasangan, dan jangan malu periksa. Jangan diobati sendiri.

Artikel ini merangkum langkah sederhananya.

https://www.theskincodeclinic.com/cara-mencegah-penularan-pms-3/

Apa kendala terbesar orang mau periksa ke dokter? Tulis di komentar.

#klinikkulit #kesehatan #krian""",
],
"das": [
"""Mobil listrik bekas kini harganya makin masuk akal, tapi pembelinya wajib lebih teliti.

Yang pertama saya cek baterainya: kapasitas tersisa, sisa garansi, dan kebiasaan pengisian pemilik sebelumnya. Baru setelah itu kelistrikan dan riwayat servis.

Artikel ini membahas daftar wajib ceknya.

https://dasindonesia.com/hal-wajib-cek-sebelum-beli-mobil-listrik-bekas/

Apa yang paling Anda khawatirkan soal EV bekas? Ceritakan di komentar.

#mobillistrik #ev #otomotif""",
],
}
SLOT = {"uky": 14, "tsc": 20, "das": 23}
FLAG = {"tsc": True, "uky": True}   # same-day image tanpa link website sendiri

CTA_RE = re.compile(r"komentar|diskusi|pendapat|tulis di|share|pengalaman|menurut anda|menurut kamu|setuju|ceritakan", re.I)
URL_RE = re.compile(r"https?://\S+")
MENTION_RE = re.compile(r"@\w+")
CJK = re.compile(r"[\u3000-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff00-\uffef]")

accounts, ok_all = [], True
for acc, variants in VAR.items():
    pick = None
    for i, t in enumerate(variants):
        t = t.strip()
        tags = re.findall(r"#(\w+)", t)
        kal = t.count(".") + t.count("?") + t.count("!")
        good = (len(t) <= 478 and URL_RE.search(t) and not MENTION_RE.search(t)
                and not CJK.search(t) and CTA_RE.search(t[-170:])
                and all(x == x.lower() for x in tags) and kal >= 5)
        print(f"[{acc}] varian{i}: len={len(t)} kalimat={kal} ok={good}")
        if good and pick is None:
            pick = t
    if pick is None:
        ok_all = False
        print(f"  !! TIDAK ADA varian valid utk {acc}")
        continue
    item = {"account": acc, "slot": SLOT[acc], "text": pick}
    if FLAG.get(acc):
        item["allow_if_no_ownlink"] = True
    accounts.append(item)

print("SEMUA VALID:", ok_all)
if ok_all:
    order = ["uky", "tsc", "das"]
    accounts.sort(key=lambda a: order.index(a["account"]))
    json.dump({"date": DATE, "accounts": accounts},
              open("/home/mantapman/.hermes/profiles/atun/workspace/threads_content_today.json", "w"),
              ensure_ascii=False, indent=2)
    print("-> threads_content_today.json ditulis")
