#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Pangkas caption Threads yang lebih dari 500 karakter pada modul topik tertentu.

Caption Threads dibatasi 500 char oleh Repliz. Fungsi ini membuang butir daftar paling
panjang lebih dulu, lalu memendekkan bagian pengantar, tanpa menyentuh nomor WA dan hashtag.

Jalankan: python3 tsc_pangkas_threads.py tsc_topik25 tsc_topik30
"""
import importlib
import json
import pprint
import re
import sys

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)


def pangkas(cap, maks=480):
    if len(cap) <= maks:
        return cap
    bagian = cap.split("\n\n")
    while len("\n\n".join(bagian)) > maks:
        kandidat = [i for i, b in enumerate(bagian) if b.lstrip().startswith("•")]
        if not kandidat:
            break
        i = max(kandidat, key=lambda k: len(bagian[k]))
        bagian.pop(i)
    out = "\n\n".join(bagian)
    if len(out) > maks:
        # pendekkan paragraf pengantar (bagian kedua) per kalimat
        if len(bagian) > 1:
            kal = re.split(r"(?<=[.!?])\s+", bagian[1])
            while len("\n\n".join(bagian)) > maks and len(kal) > 1:
                kal.pop()
                bagian[1] = " ".join(kal)
            out = "\n\n".join(bagian)
    if len(out) > maks:  # jalan terakhir: potong di batas baris
        out = out[:maks].rsplit("\n", 1)[0].rstrip()
    return out


for nama in sys.argv[1:]:
    mod = importlib.import_module(nama)
    slug, data = next(iter(mod.CAROUSEL.items()))
    lama, baru = len(data["caption_threads"]), None
    data["caption_threads"] = pangkas(data["caption_threads"])
    baru = len(data["caption_threads"])
    isi = ("#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n"
           f"\"\"\"Topik carousel TSC — caption Threads dipangkas otomatis (<=500 char).\"\"\"\n\n"
           "CAROUSEL = " + pprint.pformat({slug: data}, width=120, sort_dicts=False) + "\n")
    with open(f"{WS}/{nama}.py", "w", encoding="utf-8") as f:
        f.write(isi)
    print(f"{nama}: caption Threads {lama} -> {baru} char")
