#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Label ulang Threads @ukyhandoko + StudioSoft: kategori = ISI konten (perintah Bos 4 Okt 2026).

Bos: "Ganti .. semisal bahas AI ya Seputaran AI"
Jadi label (topic) + judul jadwal dibuat sesuai pokok bahasan post, bukan tipe Q/O/T.

Pakai: python3 label_ulang_threads_isi.py          # dry run
       python3 label_ulang_threads_isi.py --run    # eksekusi (PUT)
"""
import sys
import time
from repliz_client import get_client

UKY = "6a334e89c5ff4ce3a3225a48"
SS = "6a335b9ec5ff4ce3a3225c2a"          # Threads StudioSoft

# ── peta label: label -> daftar id jadwal Threads uky ─────────────────────────
UKY_LABEL = {
    "AI & Otomasi": ["6ac2231f07008e0e91cf3560", "6ac2232b1733078385101a77",
                     "6ac223b807008e0e91cf5036", "6ac223ba07008e0e91cf50c2",
                     "6ac223c4173307838510374f", "6ac223ce07008e0e91cf5784"],
    "Website": ["6ac2231e07008e0e91cf3547", "6ac22326173307838510193a"],
    "UMKM & Mulai Online": ["6ac2232307008e0e91cf35e2"],
    "Tim & Karier": ["6ac2232007008e0e91cf35a3", "6ac223c607008e0e91cf54dd",
                     "6ac223d01733078385103cf6"],
    "Konten & Media Sosial": ["6ac2232007008e0e91cf35b9", "6ac2232307008e0e91cf35e6",
                              "6ac2232607008e0e91cf3607", "6ac2232c07008e0e91cf3762",
                              "6ac2233107008e0e91cf37ed", "6ac2233307008e0e91cf3878"],
    "Harga & Nilai Jasa": ["6ac223211733078385101903", "6ac2232817330783851019b2",
                           "6ac223c707008e0e91cf550f", "6ac223c807008e0e91cf554d"],
    "Agensi & Layanan": ["6ac2232407008e0e91cf35f8", "6ac22325173307838510192f",
                         "6ac223ba07008e0e91cf50f4", "6ac223bb1733078385103362"],
    "Klien & Relasi": ["6ac223281733078385101981", "6ac2232b1733078385101a8d",
                       "6ac223321733078385101bb7", "6ac223b907008e0e91cf5077",
                       "6ac223bc07008e0e91cf5189", "6ac223be07008e0e91cf5215",
                       "6ac223c307008e0e91cf539b", "6ac223c417330783851036e1",
                       "6ac223c907008e0e91cf55d0", "6ac223cd07008e0e91cf574e",
                       "6ac223ce1733078385103bfc"],
    "Fokus & Prioritas": ["6ac2232917330783851019e1", "6ac223c217330783851035be",
                          "6ac223c807008e0e91cf559f", "6ac223cc1733078385103ac6"],
    "Iklan & Promosi": ["6ac2232d07008e0e91cf379d"],
    "Produktivitas & Kebiasaan": ["6ac2232d07008e0e91cf37a7", "6ac223bb07008e0e91cf5156",
                                  "6ac223c517330783851037cf"],
    "Pengalaman & Pelajaran": ["6ac2232e1733078385101b02", "6ac223331733078385101bd6",
                               "6ac223bf07008e0e91cf529e", "6ac223cc07008e0e91cf570b"],
    "Data & Pengukuran": ["6ac223301733078385101b26", "6ac223301733078385101b39",
                          "6ac223c007008e0e91cf5302"],
    "Personal Branding": ["6ac223361733078385101c48", "6ac223361733078385101c53",
                          "6ac223bd07008e0e91cf51ca"],
    "Bisnis & Strategi": ["6ac223351733078385101c44", "6ac223c01733078385103515",
                          "6ac223c607008e0e91cf548e", "6ac223ca07008e0e91cf5609",
                          "6ac223cf1733078385103c73"],
    "Teknologi & Adaptasi": ["6ac223c207008e0e91cf537e", "6ac223d01733078385103d48"],
    "Belajar & Skill": ["6ac223be07008e0e91cf5255", "6ac223cb1733078385103a6d"],
    "Kerja Mandiri": ["6ac223ca07008e0e91cf564a"],
}

# ── peta label: label -> daftar id jadwal Threads StudioSoft ──────────────────
SS_LABEL = {
    "SEO Properti": ["6ac2231f07008e0e91cf3577"],
    "Strategi Digital Marketing": ["6ac223221733078385101915", "6ac2233407008e0e91cf38a2"],
    "Edukasi SEO": ["6ac2232207008e0e91cf35de"],
    "Website & Konversi": ["6ac2234a07008e0e91cf3bdb"],
    "SEO Retail": ["6ac223241733078385101929"],
    "SEO Keuangan": ["6ac22327173307838510194c"],
    "Harga Jasa SEO": ["6ac223271733078385101960"],
    "AI Search": ["6ac223291733078385101a11"],
    "Website & Kecepatan": ["6ac2232a1733078385101a42"],
    "Konten Bisnis": ["6ac2234a07008e0e91cf3be4", "6ac223311733078385101b66"],
    "Audit Halaman": ["6ac2232c07008e0e91cf377e"],
    "Kata Kunci": ["6ac2232e07008e0e91cf37af", "6ac223351733078385101c31"],
    "Struktur Halaman": ["6ac2232f07008e0e91cf37b4"],
    "SEO Lokal": ["6ac223321733078385101b95", "6ac2233707008e0e91cf38f6"],
    "Laporan Klien": ["6ac2234b1733078385101f57"],
}


def rencana():
    tugas, terpakai = [], {}
    for akun, peta, prefiks in (("uky", UKY_LABEL, "uky"), ("ss", SS_LABEL, "ss")):
        for label, ids in peta.items():
            for sid in ids:
                if sid in terpakai:
                    raise SystemExit(f"⛔ id dobel: {sid} ({terpakai[sid]} vs {label})")
                terpakai[sid] = label
                tugas.append({"akun": akun, "id": sid, "label": label, "prefiks": prefiks})
    return tugas


def main():
    run = "--run" in sys.argv
    tugas = rencana()
    print(f"total jadwal dilabeli ulang: {len(tugas)} "
          f"(uky {sum(1 for t in tugas if t['akun'] == 'uky')} · "
          f"ss {sum(1 for t in tugas if t['akun'] == 'ss')})")
    per_label = {}
    for t in tugas:
        per_label.setdefault(t["akun"] + " " + t["label"], []).append(t["id"])
    for k in sorted(per_label):
        print(f"  {k:32s} {len(per_label[k])}")

    c = get_client()
    ok = gagal = 0
    for t in tugas:
        cur = c.get_schedule(t["id"]) or {}
        now = cur.get("scheduleAt") or ""
        tgl = now[:10]
        if not tgl:
            print("⚠️ jadwal tidak ketemu:", t["id"])
            gagal += 1
            continue
        judul = f"{t['prefiks']} {t['label']} {tgl}"
        if not run:
            print(f"  {now[:16]} {t['akun']} {t['id']} topic={cur.get('topic')!r} -> "
                  f"{t['label']!r} | title={judul!r}")
            continue
        try:
            c.update_schedule(t["id"], {"topic": t["label"], "title": judul})
            ok += 1
        except Exception as e:  # noqa: BLE001
            gagal += 1
            print("❌", t["id"], type(e).__name__, str(e)[:140])
        time.sleep(0.3)
    if not run:
        print("\n(dry run — tambahkan --run untuk eksekusi)")
        return
    print(f"\nselesai: ok {ok} | gagal {gagal}")

    # verifikasi baca balik
    salah = []
    for t in tugas:
        cur = c.get_schedule(t["id"]) or {}
        if cur.get("topic") != t["label"]:
            salah.append((t["id"], cur.get("topic"), t["label"]))
    print("topic tidak sesuai:", len(salah))
    for s in salah[:10]:
        print("  ", s)


if __name__ == "__main__":
    main()
