#!/usr/bin/env python3
"""Generator konten Threads 2026-09-22 (run cron 04:00 WIB).

Anti-redundant: semua link dipilih dari artikel yang BELUM PERNAH dipakai di jadwal
Repliz mana pun (verifikasi 22 Sep 2026: /tmp/artikel_fresh.json, dump 2.823 jadwal).

Catatan slot hari ini (temuan run 22 Sep):
- studiosoft & uky : pipeline SEO bulk sudah mengisi 7 slot (05/08/11/14/17/20/23) dgn
  link studiosoft.id → SKIP (aturan slot penuh = stop, jangan digeser).
- tslaw : sudah ada post 09:00 "Mitos atau Fakta" BER-link tslaw.id → SKIP.
- tsc   : post 09:00 (image, tanpa link) → tetap diisi post artikel-link di 20:00
          (opt-in allow_if_no_ownlink).
- das   : post 17:10 (video short, link YouTube) → tetap diisi post artikel-link 23:00.
"""
import json, re, sys

tsc = ("Banyak pasien datang setelah bertahun-tahun mencoba produk hasil scroll media sosial. "
       "Kulit belum membaik, tetapi biayanya sudah menumpuk.\n\n"
       "Di artikel baru kami, saya tulis 8 hal yang wajib diperhatikan sebelum memilih dokter kulit "
       "di Krian: spesialisasi, alat yang dipakai, sampai cara diagnosis dijelaskan.\n\n"
       "https://www.theskincodeclinic.com/panduan-memilih-dokter-kulit-krian/\n\n"
       "Menurut Anda, hal apa yang paling menentukan saat memilih dokter kulit? Tulis pendapat Anda "
       "di kolom komentar.")

das = ("Overheat termasuk penyebab kerusakan mesin paling mahal yang saya lihat di bengkel. "
       "Pemilik mobil biasanya baru sadar saat kepala silinder sudah melengkung.\n\n"
       "Padahal gejalanya muncul lebih dulu: suhu naik cepat, air radiator cepat berkurang, sampai "
       "tarikan mesin terasa berbeda. Di artikel baru kami, teknisi saya uraikan penyebabnya dan "
       "cara mencegahnya.\n\n"
       "https://dasindonesia.com/penyebab-mesin-mobil-overheat/\n\n"
       "Pernah mengalami mobil overheat di jalan? Bagikan pengalaman Anda di kolom komentar.")

tslaw = ("Hampir setiap sengketa bisnis yang saya tangani berawal dari satu hal: kontrak yang tidak "
         "memuat klausul penyelesaian sengketa.\n\n"
         "Saat masalah muncul, kedua pihak bingung harus ke mana: pengadilan, arbitrase, atau mediasi. "
         "Di artikel baru kami, saya tulis cara menyusun klausul itu agar jelas dan aman bagi UMKM.\n\n"
         "https://www.tslaw.id/klausul-penyelesaian-sengketa-kontrak-umkm/\n\n"
         "Menurut Anda, mengapa klausul ini sering diabaikan? Tulis pendapat Anda di kolom komentar.")

SS_TEXT = ("Saya sering ditanya pemilik usaha: kenapa brand saya mudah dilupakan? Jawabannya biasanya "
           "sederhana, identitasnya belum dibangun dengan sengaja.\n\n"
           "Di artikel baru saya, saya tulis cara membangun identitas brand yang kuat di Surabaya: "
           "riset audiens, pemilihan warna dan tipografi, sampai konsistensi di semua kanal.\n\n"
           "https://studiosoft.id/jasa-branding-surabaya-membangun-identitas-brand-kuat/\n\n"
           "Bagian mana yang paling sering terlewat dari brand Anda? Tulis di kolom komentar.")

UKY_TEXT = ("Sepuluh tahun saya berbisnis, kesalahan yang paling sering saya lihat adalah memilih "
            "partner marketing karena harga paling murah.\n\n"
            "Di artikel baru saya, saya tulis cara memilih digital marketing agency di Surabaya: apa "
            "yang wajib ditanya di awal, laporan seperti apa yang wajar, dan tanda partner yang perlu "
            "dihindari.\n\n"
            "https://studiosoft.id/digital-marketing-agency-surabaya-cara-memilih-partner/\n\n"
            "Kriteria apa yang paling Anda utamakan saat memilih partner? Ceritakan di kolom komentar.")

data = {
    "date": "2026-09-22",
    "accounts": [
        {"account": "studiosoft", "slot": 11, "text": SS_TEXT},
        {"account": "uky", "slot": 14, "text": UKY_TEXT},
        {"account": "tslaw", "slot": 17, "text": tslaw},
        {"account": "tsc", "slot": 20, "text": tsc, "allow_if_no_ownlink": True},
        {"account": "das", "slot": 23, "text": das, "allow_if_no_ownlink": True},
    ],
}

out = sys.argv[1] if len(sys.argv) > 1 else "threads_content_today.json"
with open(out, "w") as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

url_re = re.compile(r"https?://[^\s]+")
men_re = re.compile(r"@\w+")
cap_re = re.compile(r"(komentar|pendapat|pengalaman|ceritakan|tulis)", re.I)
ok = True
for a in data["accounts"]:
    t = a["text"]
    nlinks = len(url_re.findall(t))
    mens = men_re.findall(t)
    tabs = re.findall(r"#(\w+)", t)
    bad = [x for x in tabs if x != x.lower()]
    problems = []
    if len(t) > 500:
        problems.append("PANJANG>500")
    if nlinks < 1:
        problems.append("TANPA LINK")
    if mens:
        problems.append(f"MENTION {mens}")
    if bad:
        problems.append(f"HASHTAG KAPITAL {bad}")
    if not cap_re.search(t):
        problems.append("TANPA AJAKAN KOMENTAR")
    if "..." in t:
        problems.append("ELIPSIS")
    if problems:
        ok = False
    print(a["account"].ljust(11), "len=", len(t), "link=", nlinks, "|", "OK" if not problems else " ".join(problems))
print("SEMUA OK" if ok else "MASIH ADA MASALAH")
