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

Catatan:
- SS & @ukyhandoko slot 7-harian PENUH (115/117 pending, terisi s/d Des 2026)
  -> pakai draf backlog (link diverifikasi FREE + masih 200); scheduler akan
  mencatat `no_free_slot` (aturan Bos: jangan paksa / jangan geser ke hari lain).
- Backlog SS lama (retainer-digital-marketing) sudah TERPAKAI pipeline lain
  -> diganti artikel fresh (jasa-seo-sidoarjo) yang belum muncul di 3.491 jadwal.
- tslaw / tsc / das: artikel BELUM pernah dipakai Threads, link 200 dari host ini.
"""
import json, re, sys

DATE = "2026-09-17"
NL = chr(10) + chr(10)   # pemisah paragraf (hindari escape ganda di source)

LINK_SS = "https://studiosoft.id/jasa-seo-sidoarjo/"
LINK_UKY = "https://studiosoft.id/konsultan-ai-surabaya/"
LINK_TSLAW = "https://www.tslaw.id/8-langkah-penting-mengurus-somasi-hutang-agar-tagihan-cepat-dibayar/"
LINK_TSC = "https://www.theskincodeclinic.com/dokter-spesialis-kulit-mojokerto-kapan-butuh-dokter/"
LINK_DAS = "https://dasindonesia.com/bengkel-mercy-surabaya/"


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


items = [
    {
        "account": "studiosoft",
        "slot": 11,
        "text": caption(
            "Pemilik bisnis di Sidoarjo sering bertanya ke saya: kenapa kompetitor muncul di halaman 1 "
            "Google, website kami tidak? Jawaban saya: bukan soal iklan, tapi fondasi SEO lokal.",
            "Di artikel baru saya, saya uraikan cara bisnis lokal muncul di halaman 1: riset kata kunci "
            "berbasis area, halaman layanan yang jelas, dan sinyal Google Business Profile.",
            LINK_SS,
            "Menurut Anda, apa kendala terbesar SEO untuk bisnis lokal? Tulis pendapat Anda di komentar.",
        ),
    },
    {
        "account": "uky",
        "slot": 14,
        "text": caption(
            "Saya dulu mengira AI hanya relevan untuk perusahaan besar. Setelah saya pakai sendiri untuk "
            "pekerjaan harian, yang berubah bukan alatnya, tapi cara saya bekerja.",
            "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.",
            LINK_UKY,
            "Di bagian mana bisnis Anda ingin dibantu AI? Ceritakan di kolom komentar.",
        ),
    },
    {
        "account": "tslaw",
        "slot": 17,
        "text": caption(
            "Klien saya biasanya datang setelah tagihannya menumpuk berbulan-bulan. Yang terlewat bukan "
            "pasalnya, tapi langkah awalnya: somasi.",
            "Di artikel baru kami, saya uraikan delapan langkah mengurus somasi hutang: melengkapi bukti "
            "perjanjian, menulis jumlah utang yang spesifik, menetapkan tenggat, sampai kapan harus "
            "lanjut ke gugatan.",
            LINK_TSLAW,
            "Pernah mengalami piutang macet? Ceritakan di kolom komentar.",
        ),
    },
    {
        "account": "tsc",
        "slot": 20,
        "text": caption(
            "Banyak pasien saya sudah berganti produk skincare berkali-kali, padahal penyebab keluhan "
            "kulitnya belum pernah diperiksa.",
            "Di artikel baru kami, saya jelaskan kapan kulit butuh dokter spesialis: jerawat yang "
            "bolak-balik, bruntusan menetap, atau kulit makin perih setelah coba produk baru. Diagnosis "
            "dulu, terapi kemudian.",
            LINK_TSC,
            "Setuju? Ceritakan pengalaman kulitmu di kolom komentar.",
        ),
    },
    {
        "account": "das",
        "slot": 23,
        "text": caption(
            "Pemilik Mercedes-Benz sering mengeluh sensasi berkendara yang dulu presisi kini terasa "
            "berbeda, tapi bingung mulai dari mana.",
            "Di artikel baru kami, saya bahas gejala umum mobil Mercedes-Benz dan alasan perawatannya "
            "tak bisa diserahkan ke bengkel biasa: suspensi adaptif sampai modul elektronik butuh alat "
            "diagnostik yang tepat.",
            LINK_DAS,
            "Menurut Anda, keluhan pertama apa yang muncul saat mobil premium bermasalah? Tulis 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[-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))} 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)
