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

Pola sama dgn 17/18 Sep:
- SS & @ukyhandoko slot 7-harian Threads praktis PENUH (SS 101 pending, uky 105
  pending; slot bebas pertama jauh) -> scheduler mencatat `no_free_slot`
  (aturan Bos: jangan paksa, jangan geser hari). Kelima akun tetap ditulis
  lengkap agar file sesuai format wajib + dipakai sebagai backlog.
- Anti-redundant: semua link dicek terhadap /tmp/threads_used_all.json
  (hasil scan SEMUA jadwal Repliz semua status + log_threads_harian.json:
  studiosoft 193 / uky 140 / tslaw 35 / tsc 21 / das 53 URL pernah dipakai).
- Verifikasi HTTP 200 dari host ini (curl --http1.1, timeout 120 s).
- Target panjang <=490 char (caption >500 char = jadwal PASTI error).
"""
import json, re, sys

DATE = "2026-09-19"
NL = chr(10) + chr(10)   # pemisah paragraf

LINK_SS = "https://studiosoft.id/digital-marketing-surabaya-strategi-jitu-bisnis-naik-kelas/"
LINK_UKY = "https://studiosoft.id/branding-agency-surabaya/"
LINK_TSLAW = "https://www.tslaw.id/pentingnya-kontrak-bisnis-transaksi-usaha/"
LINK_TSC = "https://www.theskincodeclinic.com/masalah-kulit-wajib-dokter-kulit-krian/"
LINK_DAS = "https://dasindonesia.com/fortuner-diesel-atau-bensin-panduan-perawatan-bengkel-fortuner-surabaya/"


def caption(*parts):
    return NL.join(parts)


items = [
    {
        "account": "studiosoft",
        "slot": 11,
        "text": caption(
            "Saya sering bertemu bisnis di Surabaya yang rajin posting dan beriklan, tapi hasilnya "
            "jalan di tempat.",
            "Di artikel baru saya, saya uraikan strategi digital marketing Surabaya agar bisnis naik "
            "kelas: dari membenahi halaman yang sudah ada sampai menetapkan target yang terukur.",
            LINK_SS,
            "Menurut Anda, satu langkah digital marketing apa yang paling berdampak untuk bisnis lokal? "
            "Tulis pendapat Anda di kolom komentar.",
        ),
    },
    {
        "account": "uky",
        "slot": 14,
        "text": caption(
            "Saya pernah melihat bisnis dengan produk bagus, tapi di mata calon pembeli terlihat biasa "
            "saja. Ternyata persoalannya bukan produknya, melainkan brand yang belum tertata.",
            "Di artikel baru saya, saya tulis cara memilih branding agency dan tanda-tanda yang perlu "
            "diwaspadai sebelum bisnis menyerahkan identitas brandnya ke pihak lain.",
            LINK_UKY,
            "Pernah punya pengalaman kurang nyaman saat mengurus brand? Ceritakan di kolom komentar.",
        ),
    },
    {
        "account": "tslaw",
        "slot": 17,
        "text": caption(
            "Saya sering bertemu klien yang baru sadar pentingnya kontrak setelah tagihannya sulit "
            "ditagih. Padahal kontrak yang rapi dibuat justru untuk mencegah masalah itu.",
            "Di artikel baru kami, saya jelaskan mengapa setiap transaksi usaha sebaiknya punya "
            "perjanjian tertulis dan apa risikonya kalau hanya berpegang pada kesepakatan lisan.",
            LINK_TSLAW,
            "Apakah kerja sama bisnis Anda sudah pakai kontrak tertulis? Ceritakan di kolom komentar.",
        ),
    },
    {
        "account": "tsc",
        "slot": 20,
        "text": caption(
            "Banyak pasien saya datang setelah berbulan-bulan mencoba produk perawatan sendiri. "
            "Padahal ada keluhan kulit yang memang perlu ditangani dokter sejak awal.",
            "Di artikel baru kami, saya bahas sepuluh masalah kulit yang sebaiknya tidak diobati "
            "sendiri, dari jerawat meradang sampai perubahan tahi lalat.",
            LINK_TSC,
            "Keluhan kulit apa yang paling membuatmu ragu ke dokter? Ceritakan pengalamanmu "
            "di kolom komentar.",
        ),
    },
    {
        "account": "das",
        "slot": 23,
        "text": caption(
            "Banyak pemilik Fortuner bingung soal diesel atau bensin, padahal perawatannya berbeda. "
            "Salah paham ini sering membuat biaya servis membengkak.",
            "Di artikel baru kami, teknisi saya jelaskan perawatan Fortuner diesel dan bensin: dari "
            "oli, filter, sampai kebiasaan berkendara yang membuat mesin awet.",
            LINK_DAS,
            "Anda pengguna Fortuner diesel atau bensin? Ceritakan pengalaman 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 > 490:
        problems.append(f"PANJANG {n}>490")
    if not URL_RE.search(t):
        problems.append("TANPA LINK")
    if not CTA_RE.search(t[-200:]):
        problems.append("TANPA CTA")
    if MENTION_RE.search(t):
        problems.append("ADA MENTION")
    if "\u2026" in t or "..." in 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))} "
          f"cta_tail={bool(CTA_RE.search(t[-200:]))} {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)
