#!/usr/bin/env python3
"""Bangun threads_content_today.json untuk 18 Okt 2026 + validasi (panjang, link, mention, CJK)."""
import json, re

CJK = re.compile(r"[\u3000-\u9fff\uff00-\uffef]")
URL = re.compile(r"https?://\S+")

accounts = []

accounts.append({
    "account": "studiosoft",
    "slot": 11,
    "text": (
        "Tanya \"berapa biayanya?\" itu wajar. Yang bikin repot, jawabannya nggak bisa satu angka.\n\n"
        "Dua agensi bisa kasih harga beda jauh untuk pekerjaan yang kelihatan sama. Bedanya di siapa yang ngerjain, berapa kanal yang digarap, dan apakah belanja iklan sudah termasuk.\n\n"
        "Satu yang sering kelewat: akun Google Ads dan akses website sebaiknya tetap atas nama bisnismu.\n\n"
        "Kalau minta penawaran, hal apa yang paling kamu cek dulu? Tulis di komentar ya.\n\n"
        "https://studiosoft.id/biaya-digital-agency-surabaya/"
    ),
    "topic": "Harga & Nilai Jasa",
    "title": "StudioSoft Harga & Nilai Jasa 2026-10-18",
    "allow_if_no_ownlink": True,
    "min": 200,
    "max": 500,
})

accounts.append({
    "account": "uky",
    "slot": 14,
    "text": (
        "Ada calon klien yang nanya, \"kenapa penawaran agensi bisa beda dua kali lipat buat kerjaan yang sama?\"\n\n"
        "Jawabannya jarang soal mahal atau murah. Biasanya soal siapa yang benar-benar ngerjain, dan berapa banyak janji di awal yang nggak pernah ditagih.\n\n"
        "Yang selalu aku tekankan: akun iklan dan akses website tetap atas nama bisnis klien.\n\n"
        "Menurut kamu, apa yang paling harus jelas sebelum deal? Ceritakan di komentar ya.\n\n"
        "https://studiosoft.id/biaya-digital-agency-surabaya/"
    ),
    "topic": "Harga & Nilai Jasa",
    "title": "uky Harga & Nilai Jasa 2026-10-18",
    "allow_if_no_ownlink": True,
    "min": 300,
    "max": 480,
})

accounts.append({
    "account": "tslaw",
    "slot": 17,
    "text": (
        "Banyak yang masih menganggap kesepakatan lewat chat atau lisan sudah cukup. Secara teori bisa, tapi begitu masalah muncul, pembuktiannya susah.\n\n"
        "Kontrak tertulis bukan cuma formalitas. Di situ jelas jumlah barang, harga, jadwal kirim, dan cara bayar. Nggak ada lagi debat \"saya kira begitu\".\n\n"
        "Yang sering kami temui: identitas pihak nggak lengkap, atau klausul sengketa nggak diatur.\n\n"
        "Usahamu sudah pakai kontrak tertulis? Ceritakan di komentar ya.\n\n"
        "https://www.tslaw.id/kontrak-bisnis-yang-aman/"
    ),
    "topic": "Kontrak Bisnis",
    "title": "tslaw Kontrak Bisnis 2026-10-18",
    "allow_if_no_ownlink": True,
    "min": 200,
    "max": 500,
})

accounts.append({
    "account": "tsc",
    "slot": 20,
    "text": (
        "Kulit perih tiap coba produk baru, memerah kena matahari, atau terasa kencang padahal nggak berjerawat? Bisa jadi kulitmu sensitif.\n\n"
        "Seringnya lapisan pelindung kulit kerja kurang optimal, jadi zat yang aman pun bisa bikin iritasi. Pemicunya: pembersih keras, eksfoliasi atau kebanyakan produk baru.\n\n"
        "Di klinik kami, langkah pertamanya menyederhanakan perawatan.\n\n"
        "Kamu sering iritasi karena apa? Tulis di komentar ya.\n\n"
        "https://www.theskincodeclinic.com/kulit-sensitif-penyebab-dan-cara-merawat/"
    ),
    "topic": "Kulit Sensitif",
    "title": "TSC Kulit Sensitif 2026-10-18",
    "allow_if_no_ownlink": True,
    "min": 200,
    "max": 500,
})

accounts.append({
    "account": "das",
    "slot": 20,
    "text": (
        "Banyak pemilik mobil listrik baru sadar baterainya bermasalah setelah jarak tempuhnya turun jauh. Padahal datanya sudah kelihatan.\n\n"
        "Pemeriksaan yang cuma nanya keluhan sering nggak cukup. Masalah sel baterai bisa jalan pelan tanpa terasa di kemudi.\n\n"
        "Karena itu kami pakai EV diagnostic: baca langsung data baterai, arus pengisian, sampai catatan gangguan yang tersimpan.\n\n"
        "Kamu sudah pernah cek kesehatan baterai mobil listrikmu? Tulis di komentar ya.\n\n"
        "https://dasindonesia.com/ev-diagnostic/"
    ),
    "topic": "EV & Diagnostik",
    "title": "DAS EV & Diagnostik 2026-10-18",
    "allow_if_no_ownlink": True,
    "min": 200,
    "max": 500,
})

data = {"date": "2026-10-18", "accounts": accounts}
json.dump(data, open("threads_content_today.json", "w"), ensure_ascii=False, indent=1)

ok = True
for a in accounts:
    t = a["text"]
    n = len(t)
    issues = []
    if not URL.search(t):
        issues.append("TANPA LINK")
    if re.search(r"(?<!\S)@\w+", t):
        issues.append("MENTION")
    if CJK.search(t):
        issues.append("CJK")
    if n > a["max"]:
        issues.append(f"KEPANJANGAN {n}>{a['max']} (buang {n-a['max']})")
    if n < a["min"]:
        issues.append(f"KEPENDEKAN {n}<{a['min']}")
    print(f"{a['account']:11s} slot {a['slot']:02d}  {n:3d} char  {a['topic']:22s} {'OK' if not issues else ' | '.join(issues)}")
    if issues:
        ok = False
print("SEMUA OK" if ok else "ADA MASALAH")
