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

Aturan: <=478 char, >=1 link artikel website sendiri, >=5 kalimat, CTA komentar di ekor,
hashtag huruf kecil, tanpa @mention, tanpa CJK.
Studiosoft di-SKIP: sudah ada jadwal same-day ber-link studiosoft.id (album 09:00 + anak
09:01/09:02) -> guard maks 1 konten/hari/akun.

Link FRESH (belum pernah dipakai di jadwal Repliz mana pun, diverifikasi HTTP 200):
  uky    : studiosoft.id/tools-analisis-kompetitor-media-sosial
  tslaw  : www.tslaw.id/cara-memilih-law-firm-surabaya-untuk-perusahaan
  tsc    : www.theskincodeclinic.com/7-mitos-vs-fakta-tentang-dokter-kulit-kelamin-yang-perlu-kamu-tahu
  das    : dasindonesia.com/check-engine-menyala-tiba-tiba-7-langkah-wajib-lakukan-sekarang
"""
import json, re

DATE = "2026-10-05"

ITEMS = [
{
 "account": "uky", "slot": 14,
 "topic": "AI & Otomasi", "title": f"uky AI & Otomasi {DATE}",
 "allow_if_no_ownlink": True,
 "text": """Sebelum bikin konten, saya bukan langsung cari ide. Saya lihat dulu apa yang ramai di kompetitor.

Saya catat format, jam posting, dan pertanyaan yang paling banyak dikomentari. Dari situ kelihatan celah yang belum dijawab.

12 tools untuk ini saya kumpulkan di sini:
https://studiosoft.id/tools-analisis-kompetitor-media-sosial/

Kamu riset kompetitor dulu atau langsung bikin? Ceritakan di komentar.

#digitalmarketing #konten #tools""",
},
{
 "account": "tslaw", "slot": 17,
 "topic": "Hukum Bisnis", "title": f"Tslaw Hukum Bisnis {DATE}",
 "text": """Banyak perusahaan baru mencari law firm setelah masalahnya membesar. Padahal biayanya jauh lebih mahal daripada menyiapkan pendampingan sejak awal.

Tiga hal yang saya cek: pengalaman di bidangnya, kejelasan biaya, dan siapa yang menangani perkara.

Delapan hal wajib diceknya di sini:
https://www.tslaw.id/cara-memilih-law-firm-surabaya-untuk-perusahaan/

Menurut Anda, apa yang paling sering diabaikan saat memilih law firm? Tulis di komentar.

#hukumbisnis #lawfirmsurabaya""",
},
{
 "account": "tsc", "slot": 20,
 "topic": "Mitos & Fakta Kulit", "title": f"TSC Mitos & Fakta Kulit {DATE}",
 "allow_if_no_ownlink": True,
 "text": """Mitos soal kulit dan kelamin masih sering saya dengar saat pasien berobat. Mulai dari anggapan masalah kelamin selalu soal kebersihan, sampai malu diperiksa.

Banyak yang sembuh justru setelah tahu faktanya dan ditangani tepat.

Tujuh mitos paling menyesatkan ada di sini:
https://www.theskincodeclinic.com/7-mitos-vs-fakta-tentang-dokter-kulit-kelamin-yang-perlu-kamu-tahu/

Kamu pernah dengar mitos apa soal kulit dan kelamin? Ceritakan di komentar.

#klinikkulit #dokterkulit""",
},
{
 "account": "das", "slot": 23,
 "topic": "Diagnosa & Perawatan Mesin", "title": f"DAS Diagnosa & Perawatan Mesin {DATE}",
 "text": """Lampu check engine yang menyala tiba-tiba sering bikin panik di tengah jalan. Padahal tidak semua berarti mesin rusak parah.

Langkah pertama saya cek apakah mobil masih berjalan normal. Kalau ada getaran atau kehilangan tenaga, lebih aman berhenti dan minta bantuan.

Tujuh langkah wajibnya:
https://dasindonesia.com/check-engine-menyala-tiba-tiba-7-langkah-wajib-lakukan-sekarang/

Pernah ngalamin check engine menyala? Ceritakan di komentar.

#bengkelmobil #perawatanmobil""",
},
]

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]")

ok_all = True
out = []
for it in ITEMS:
    t = it["text"].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"[{it['account']}] len={len(t)} kalimat={kal} tags={tags} ok={good}")
    if not good:
        ok_all = False
    o = {k: v for k, v in it.items() if k in ("account", "slot", "text", "topic", "title", "allow_if_no_ownlink")}
    out.append(o)

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