#!/usr/bin/env python3
"""
SUMU Sidoarjo — LinkedIn Scheduler HARIAN (FIXED 16 Agustus 2026)
Bos minta: perbanyak share event Kopdar SUMU Sidoarjo "Big Deal, Big Opportunity" di LinkedIn —
frekuensi naik dari 2 hari sekali jadi SETIAP HARI. Akun bergantian: LinkedIn @ukyhandoko & LinkedIn StudioSoft.
Semua artikel coverage SUMU dipakai bergiliran (7 link media + artikel resmi studiosoft.id).
Angle konten beda tiap kali (bank konten + tracker) — konten selalu unik, link selalu dicek nyala.
"""
import sys, json, os, random
from datetime import datetime, timezone, timedelta
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import ReplizClient
from threads_text_check import cek_teks_threads, ThreadsTextError

UKY_LINKEDIN = "6a33ca10c5ff4ce3a322705d"
SS_LINKEDIN = "6a334c49c5ff4ce3a32259c9"
TRACKER = "/home/mantapman/.hermes/profiles/atun/workspace/.sumu_linkedin_tracker.json"

L1 = "https://sumu.or.id/sumu-sidoarjo-tingkatkan-daya-saing-umkm-lewat-kopdar-bertema-big-deal-big-opportunity/"
L2 = "https://mocimu.id/sumu-sidoarjo-tingkatkan-daya-saing-umkm-lewat-kopdar-bertema-big-deal-big-opportunity/"
L3 = "https://kabarmuh.id/sumu-sidoarjo-perkuat-daya-saing-umkm-lewat-kopdar-bertema-big-deal-big-opportunity/"
L4 = "https://majelistabligh.id/kuatkan-semangat-kolaborasi-sumu-sidoarjo-gelar-kopdar-bertemakan-big-deal-big-opportunity/"
L5 = "https://kuliahalislam.com/sumu-sidoarjo-kopdar-daya-saing-umkm/"
L6 = "https://pwmu.co/sumu-sidoarjo-dorong-umkm-naik-kelas-melalui-kopdar-big-deal-big-opportunity/"
L7 = "https://yasmanatura.co.id/kopdar-sumu-sidoarjo-umkm-naik-kelas-big-deal-big-opportunity/"
L8 = "https://studiosoft.id/studiosoft-narasumber-sumu-sidoarjo-jasa-seo-umkm-naik-kelas/"  # artikel resmi StudioSoft

# (akun, teks) — angle beda-beda, unik
KONTEN = [
    (UKY_LINKEDIN,
     "Di era digital, website itu kantor utama sebuah bisnis di internet. Ini pesan yang saya sampaikan saat "
     "menjadi narasumber di Kopdar SUMU Sidoarjo \u201cBig Deal, Big Opportunity\u201d.\n\n"
     "Banyak UMKM masih menganggap website sekadar pelengkap. Padahal, website profesional + strategi SEO yang "
     "tepat akan membuat bisnis lebih mudah ditemukan calon pelanggan \u2014 dan itu modal utama untuk naik kelas. "
     "Digitalisasi bukan lagi pilihan, tapi kebutuhan.\n\n"
     "Saya senang melihat antusiasme pelaku usaha yang mulai serius bertransformasi. Semoga makin banyak yang "
     "berani memulai!\n\n" + L1 + "\n\n#SUMUSidoarjo #UMKMNaikKelas #SEO #DigitalMarketing #StudioSoft"),

    (SS_LINKEDIN,
     "Kolaborasi adalah fondasi ekosistem UMKM yang kuat. Itulah semangat Kopdar SUMU Sidoarjo "
     "\u201cBig Deal, Big Opportunity\u201d yang baru saja digelar.\n\n"
     "Ketua Korda SUMU Sidoarjo, Samsul Sudhibiyo, menyebut forum ini ibarat menyusun kepingan puzzle \u2014 setiap "
     "anggota punya peran, dan ketika terhubung, terbentuk ekosistem yang utuh. StudioSoft hadir di sana sebagai "
     "partner digital yang siap mendampingi UMKM bertransformasi.\n\n"
     "Semoga kolaborasi seperti ini terus lahir dan membawa UMKM naik kelas.\n\n" + L3 + "\n\n"
     "#StudioSoft #UMKMNaikKelas #Kolaborasi #DigitalMarketing #Sidoarjo"),

    (UKY_LINKEDIN,
     "Satu sesi yang paling membuka wawasan di Kopdar SUMU Sidoarjo: materi Ahmad, praktisi buyer pasar Jepang.\n\n"
     "Menurutnya, pasar Jepang tidak sekadar membeli produk yang bagus \u2014 mereka mencari mitra bisnis yang "
     "konsisten dan dapat dipercaya. Kualitas, disiplin produksi, dan komitmen adalah tiket masuknya.\n\n"
     "Buat UMKM Indonesia, ini kabar baik: peluang ekspor terbuka luas selama standar mutu terjaga. Mulai dari "
     "hal kecil \u2014 termasuk membangun kehadiran digital yang profesional \u2014 kita bisa bersaing di pasar global.\n\n"
     + L2 + "\n\n#UMKMNaikKelas #Ekspor #PasarJepang #SUMUSidoarjo #SEO"),

    (SS_LINKEDIN,
     "Ekspor bukan lagi monopoli perusahaan besar. Ini poin penting dari Amin, Founder Ekspor.id, di Kopdar "
     "SUMU Sidoarjo \u201cBig Deal, Big Opportunity\u201d.\n\n"
     "UMKM punya peluang yang sama selama siap: legalitas usaha, kualitas produk, dan pemahaman pasar tujuan. "
     "Yang paling dibutuhkan adalah keberanian untuk memulai dan terus meningkatkan kualitas.\n\n"
     "StudioSoft mendukung penuh semangat ini \u2014 karena perjalanan UMKM naik kelas selalu dimulai dari fondasi "
     "digital yang benar.\n\n" + L6 + "\n\n#StudioSoft #UMKM #Ekspor #DigitalMarketing #SUMUSidoarjo"),

    (UKY_LINKEDIN,
     "Pertanyaan yang sering muncul dari pelaku usaha: \u201cSEO itu mahal dan lama, apa benar worth it?\u201d\n\n"
     "Di Kopdar SUMU Sidoarjo kemarin, saya jelaskan: SEO itu investasi jangka panjang, bukan biaya. Website yang "
     "dioptimasi dengan benar akan terus mendatangkan calon pelanggan tanpa harus bayar iklan terus-menerus. "
     "Mulai dari riset kata kunci, konten yang menjawab kebutuhan, sampai struktur website yang rapi.\n\n"
     "UMKM yang naik kelas adalah yang berani mulai dari sekarang, bukan menunggu nanti.\n\n" + L1 + "\n\n"
     "#SEO #UMKMNaikKelas #DigitalMarketing #SUMUSidoarjo #StudioSoft"),

    (SS_LINKEDIN,
     "Dukungan PDM Sidoarjo dan LP UMKM terhadap penguatan kapasitas pelaku usaha patut diapresiasi. Imam Sugiri "
     "menegaskan di Kopdar SUMU Sidoarjo: SUMU adalah ruang strategis mempertemukan pelaku usaha, membangun "
     "sinergi, dan menghadirkan solusi bersama.\n\n"
     "StudioSoft bangga menjadi bagian dari ekosistem ini. Kami percaya, ketika pelaku usaha saling terhubung "
     "dan didukung fondasi digital yang kuat, kesejahteraan masyarakat ikut meningkat.\n\n"
     "Mari terus membangun kolaborasi nyata.\n\n" + L4 + "\n\n"
     "#StudioSoft #UMKM #Kolaborasi #SUMUSidoarjo #DigitalMarketing"),

    (UKY_LINKEDIN,
     "Momen favorit saya di Kopdar SUMU Sidoarjo \u201cBig Deal, Big Opportunity\u201d: sesi tanya jawab. Pelaku usaha "
     "bertanya langsung soal website, SEO, sampai strategi pemasaran digital \u2014 bukan teori, tapi praktik nyata.\n\n"
     "Satu hal yang selalu saya tekankan: jangan tunggu sempurna untuk mulai. Website sederhana yang konsisten "
     "dirawat jauh lebih baik daripada website sempurna yang tidak pernah jadi. Pelan-pelan, tapi pasti.\n\n"
     "Buat yang hadir atau ingin tahu lebih lanjut, silakan terhubung \u2014 saya senang berdiskusi.\n\n" + L7 + "\n\n"
     "#UMKMNaikKelas #Website #SEO #SUMUSidoarjo #DigitalMarketing"),

    (SS_LINKEDIN,
     "Satu minggu setelah Kopdar SUMU Sidoarjo \u201cBig Deal, Big Opportunity\u201d, semangatnya masih terasa: UMKM "
     "Sidoarjo serius ingin naik kelas \u2014 dari transformasi digital, SEO, hingga peluang ekspor.\n\n"
     "Di StudioSoft, kami percaya fondasi utamanya sederhana: website profesional + strategi digital yang terukur. "
     "Dari situ, bisnis ditemukan, dipercaya, dan tumbuh.\n\n"
     "Bagi UMKM yang ingin memulai, kami siap mendampingi. Yuk, naik kelas bareng!\n\n" + L5 + "\n\n"
     "#StudioSoft #UMKMNaikKelas #DigitalMarketing #Website #Sidoarjo"),

    # ── BATCH 2 (16 Agustus 2026): artikel resmi StudioSoft + perbanyak share ──
    (UKY_LINKEDIN,
     "Kabar baik buat yang penasaran dengan materi Kopdar SUMU Sidoarjo: rangkuman resminya sudah terbit di "
     "website StudioSoft.\n\n"
     "Di artikel itu saya jabarkan lengkap kenapa website adalah kantor utama bisnis di internet, bagaimana "
     "strategi SEO membantu UMKM ditemukan calon pelanggan, dan mengapa digitalisasi bukan lagi pilihan \u2014 "
     "tapi kebutuhan untuk naik kelas.\n\n"
     "Buat pelaku usaha yang ingin mulai, silakan baca dan langsung praktikkan. Kalau ada yang mau didiskusikan, "
     "saya siap ngobrol.\n\n" + L8 + "\n\n"
     "#SUMUSidoarjo #UMKMNaikKelas #SEO #Website #DigitalMarketing #StudioSoft"),

    (SS_LINKEDIN,
     "Ada satu pesan yang selalu kami bawa ke mana pun: di era digital, website adalah kantor utama bisnis "
     "di internet.\n\n"
     "Pesan itu juga yang kami sampaikan saat dipercaya menjadi narasumber di Kopdar SUMU Sidoarjo \u201cBig Deal, "
     "Big Opportunity\u201d. Di artikel resmi kami, kami rangkum materi lengkapnya: mulai dari pemanfaatan website "
     "sebagai identitas bisnis, penerapan SEO, hingga teknik meningkatkan visibilitas usaha.\n\n"
     "Semoga bermanfaat untuk UMKM yang ingin naik kelas.\n\n" + L8 + "\n\n"
     "#StudioSoft #SUMUSidoarjo #UMKMNaikKelas #JasaSEO #Surabaya"),

    (UKY_LINKEDIN,
     "Banyak yang bertanya setelah Kopdar SUMU Sidoarjo: \u201cBang, SEO itu penting banget nggak sih untuk "
     "UMKM kayak saya?\u201d\n\n"
     "Jawaban saya selalu sama: justru UMKM yang paling diuntungkan. Mayoritas calon pelanggan mulai mencari "
     "produk atau jasa lewat Google. Muncul di halaman pertama berarti peluang ditemukan jauh lebih besar \u2014 "
     "tanpa harus terus-menerus bayar iklan.\n\n"
     "Saya jelaskan lebih lengkap di artikel ini, termasuk kenapa SEO itu investasi jangka panjang, bukan biaya.\n\n"
     + L8 + "\n\n#SEO #UMKMNaikKelas #SUMUSidoarjo #DigitalMarketing #StudioSoft"),

    (SS_LINKEDIN,
     "Daya saing UMKM tidak datang dengan sendirinya \u2014 ia dibangun, salah satunya lewat kolaborasi dan "
     "transformasi digital. Itulah semangat Kopdar SUMU Sidoarjo yang diangkat media nasional Muhammadiyah.\n\n"
     "Lewat forum ini, pelaku usaha saling terhubung: belajar digital marketing, SEO, hingga peluang ekspor. "
     "StudioSoft bangga hadir di sana sebagai partner digital yang siap mendampingi.\n\n"
     "Baca liputannya untuk tahu bagaimana SUMU Sidoarjo mendorong daya saing UMKM.\n\n" + L2 + "\n\n"
     "#SUMUSidoarjo #UMKMNaikKelas #StudioSoft #DigitalMarketing #DayaSaing"),

    (UKY_LINKEDIN,
     "Sebagai narasumber di Kopdar SUMU Sidoarjo, satu hal yang paling berkesan: antusiasme peserta yang "
     "bertanya sampai sesi habis. Mereka tidak malu belajar dari nol \u2014 dan itu kunci naik kelas.\n\n"
     "Di artikel liputannya, semangat \u201cBig Deal, Big Opportunity\u201d itu tertangkap jelas: pelaku usaha, UMKM, "
     "dan komunitas bisnis Muhammadiyah Sidoarjo berkomitmen membangun ekosistem yang saling menguatkan.\n\n"
     "Momentum seperti ini yang membuat saya optimis UMKM Indonesia bisa bersaing.\n\n" + L1 + "\n\n"
     "#SUMUSidoarjo #UMKMNaikKelas #SEO #DigitalMarketing #StudioSoft"),

    (SS_LINKEDIN,
     "Kolaborasi nyata selalu lebih kuat daripada bekerja sendiri. Ini yang kami rasakan di Kopdar SUMU "
     "Sidoarjo \u2014 dan tergambar juga di liputan Kuliah Al-Islam.\n\n"
     "Forum itu mempertemukan banyak pihak: pelaku usaha, praktisi digital, hingga lembaga pendukung UMKM. "
     "Semua duduk bersama mencari jalan konkret supaya UMKM naik kelas.\n\n"
     "StudioSoft siap jadi bagian dari perjalanan itu \u2014 mulai dari website profesional, SEO, sampai strategi "
     "digital yang terukur.\n\n" + L5 + "\n\n"
     "#StudioSoft #Kolaborasi #UMKMNaikKelas #DigitalMarketing #SUMUSidoarjo"),

    (UKY_LINKEDIN,
     "Salah satu pertanyaan favorit di Kopdar SUMU Sidoarjo: \u201cKalau sudah jualan di marketplace, masih "
     "butuh website nggak?\u201d\n\n"
     "Jawaban saya: marketplace itu tempat sewa. Website itu aset milik sendiri. Di marketplace, algoritma bisa "
     "berubah kapan saja. Di website yang dioptimasi SEO, calon pelanggan bisa menemukan kita langsung dari "
     "Google \u2014 dan itu milik kita jangka panjang.\n\n"
     "Saya bahas tuntas topik ini di artikel resmi StudioSoft. Silakan disimak.\n\n" + L8 + "\n\n"
     "#Website #SEO #UMKMNaikKelas #SUMUSidoarjo #StudioSoft"),

    (SS_LINKEDIN,
     "Kopdar SUMU Sidoarjo \u201cBig Deal, Big Opportunity\u201d meninggalkan jejak yang kuat: UMKM Sidoarjo serius "
     "berbenah \u2014 dari pondasi digital sampai wawasan ekspor.\n\n"
     "Kami bersyukur StudioSoft dipercaya mengisi materi transformasi digital di sesi pertama. Materi yang kami "
     "sampaikan \u2014 website sebagai identitas bisnis, strategi SEO, dan visibilitas usaha \u2014 mendapat respons "
     "antusias dari peserta.\n\n"
     "Buat yang belum sempat hadir, rangkuman lengkapnya sudah kami tulis di sini.\n\n" + L8 + "\n\n"
     "#StudioSoft #SUMUSidoarjo #UMKM #DigitalMarketing #SEO"),

    (UKY_LINKEDIN,
     "Dari Kopdar SUMU Sidoarjo saya belajar satu hal: pelaku usaha itu sebenarnya haus ilmu \u2014 mereka hanya "
     "butuh ruang dan pemantik yang tepat.\n\n"
     "Ketika materi website & SEO saya sampaikan, banyak yang langsung menghubungkan dengan kondisi bisnisnya "
     "sendiri: \u201cOh, jadi ini yang kurang dari website saya.\u201d Momen-momen seperti itu yang membuat kerja saya "
     "terasa bermakna.\n\n"
     "Liputan lengkap acaranya bisa dibaca di sini.\n\n" + L7 + "\n\n"
     "#SUMUSidoarjo #UMKMNaikKelas #Website #SEO #DigitalMarketing"),

    (SS_LINKEDIN,
     "Ekosistem UMKM yang kuat terbentuk ketika semua pihak mau berbagi \u2014 dan Kopdar SUMU Sidoarjo adalah "
     "contohnya: narasumber berbagi ilmu, media meliput, pelaku usaha saling terhubung.\n\n"
     "Liputan dari berbagai media Muhammadiyah menangkap semangat itu dengan baik, termasuk yang tayang di "
     "PW Muhammadiyah: UMKM Sidoarjo didorong naik kelas lewat kolaborasi lintas sektor.\n\n"
     "StudioSoft senang menjadi bagian dari gerakan ini.\n\n" + L6 + "\n\n"
     "#StudioSoft #UMKMNaikKelas #Kolaborasi #SUMUSidoarjo #DigitalMarketing"),

    # ── BATCH 3 (16 Agustus 2026): sesekali branding konsultan SEO ──
    (UKY_LINKEDIN,
     "Sebagai konsultan SEO, pertanyaan yang paling sering saya terima: \u201cWebsite saya sudah bagus, tapi "
     "kenapa sepi pengunjung?\u201d\n\n"
     "Jawabannya hampir selalu sama: website yang bagus tanpa strategi SEO itu seperti toko bagus di gang "
     "buntu \u2014 orang tidak tahu keberadaannya. Konsultan SEO hadir untuk memastikan bisnis ditemukan calon "
     "pelanggan di Google, bukan sekadar tampil cantik.\n\n"
     "Buat yang sedang berjuang dengan website sepi pengunjung, saya siap diskusi.",
     ),

    (SS_LINKEDIN,
     "Banyak pemilik bisnis berpikir SEO itu urusan teknis yang rumit \u2014 padahal intinya sederhana: "
     "memastikan orang yang butuh layanan Anda, menemukan Anda di Google.\n\n"
     "Sebagai konsultan SEO di Surabaya, kami menangani itu secara menyeluruh: riset kata kunci, optimasi "
     "teknis website, konten yang menjawab kebutuhan, hingga membangun otoritas. Semua terukur, semua "
     "berbasis data.\n\n"
     "Punya website tapi sepi pengunjung? Mungkin ini saatnya konsultasi dulu.",
     ),

    (UKY_LINKEDIN,
     "Satu nasihat yang selalu saya berikan sebagai konsultan SEO: jangan kejar traffic dulu \u2014 kejar "
     "kata kunci yang tepat.\n\n"
     "Traffic 10.000 orang yang salah sasaran nilainya kalah jauh dari 500 pengunjung yang benar-benar "
     "membutuhkan produk Anda. Riset kata kunci yang jujur adalah fondasi semua strategi SEO yang sehat.\n\n"
     "Mulai dari sana, sisanya akan mengikuti.",
     ),

    (SS_LINKEDIN,
     "Apa bedanya jasa SEO biasa dengan konsultan SEO? Konsultan tidak hanya mengerjakan \u2014 ia "
     "mendampingi, mengukur, dan memastikan setiap langkah punya tujuan.\n\n"
     "Di StudioSoft, kami memosisikan diri sebagai konsultan: audit dulu, susun strategi, eksekusi, lalu "
     "evaluasi berkala. Karena SEO bukan sprint \u2014 ini maraton yang butuh arah yang jelas.\n\n"
     "Bisnis Anda siap ditemukan di Google?",
     ),

    (UKY_LINKEDIN,
     "Banyak yang heran kenapa kompetitor yang produknya biasa saja bisa ramai, sementara produk yang "
     "lebih bagus sepi.\n\n"
     "Sebagai konsultan SEO, saya sering melihat penyebabnya: kompetitor paham cara ditemukan. Mereka "
     "menguasai kata kunci yang dicari pelanggan, punya konten yang menjawab, dan website yang cepat. "
     "Kualitas produk itu penting \u2014 tapi kalau tidak ditemukan, tidak ada yang melihatnya.\n\n"
     "Ini yang biasa saya bantu benahi.",
     ),

    (SS_LINKEDIN,
     "Sebagai konsultan SEO, kami percaya satu hal: setiap bisnis punya kata kunci emasnya sendiri \u2014 "
     "kata kunci yang ketika dicari orang, bisnis Andalah yang paling relevan untuk muncul.\n\n"
     "Tugas kami menemukan kata kunci itu, lalu membangun seluruh strategi digital di sekitarnya. "
     "Terstruktur, terukur, dan berkelanjutan.\n\n"
     "Sudah tahu kata kunci emas bisnis Anda? Kalau belum, kami bisa bantu cari.",
     ),
]


def load_tracker():
    if os.path.exists(TRACKER):
        try:
            with open(TRACKER) as f:
                return json.load(f)
        except Exception:
            return {}
    return {}


def save_tracker(t):
    with open(TRACKER, "w") as f:
        json.dump(t, f, indent=2)


def next_free_date(client, account_id, now_wib=None):
    """Cari tanggal kosong berikutnya jam 08:00 WIB untuk akun LinkedIn.
    Anti-dobel: skip tanggal yang sudah ada jadwal masa depan di akun itu."""
    TZ = timezone(timedelta(hours=7))
    now_wib = now_wib or datetime.now(TZ)
    used = set()
    for page in range(1, 12):
        r = client.get(f"/public/schedule?accountId={account_id}&page={page}&limit=100")
        docs = r.get("docs", [])
        if not docs:
            break
        for s in docs:
            at = s.get("scheduleAt", "")
            try:
                dt = datetime.fromisoformat(at.replace("Z", "+00:00")).astimezone(TZ)
                if dt >= now_wib:
                    used.add(dt.strftime("%Y-%m-%d"))
            except Exception:
                pass
        if len(docs) < 100:
            break
    day = now_wib + timedelta(days=1)  # minimal besok
    while day.strftime("%Y-%m-%d") in used:
        day += timedelta(days=1)
    return day.strftime("%Y-%m-%d")


def post_single(client, idx, account_id, teks, date_str):
    """Jadwalkan satu konten ke tanggal tertentu jam 08:00 WIB (= 01:00 UTC)."""
    iso = f"{date_str}T01:00:00.000Z"
    res = client.schedule_text(account_id, teks, iso, title="", topic="")
    sid = res.get("scheduleId") or res.get("_id") or "?"
    return sid


def main():
    client = ReplizClient()
    tracker = load_tracker()
    idx = tracker.get("idx", -1)
    idx = (idx + 1) % len(KONTEN)
    account_id, teks = KONTEN[idx]

    # validasi wajib: link nyala + panjang wajar
    try:
        teks = cek_teks_threads(teks, label=f"LinkedIn SUMU #{idx + 1}", maxlen=4000)
    except ThreadsTextError as e:
        print(f"SKIP: {e}")
        sys.exit(1)

    # slot kosong berikutnya jam 08:00 WIB (anti-dobel)
    date_str = next_free_date(client, account_id)
    iso = f"{date_str}T01:00:00.000Z"

    try:
        sid = post_single(client, idx, account_id, teks, date_str)
        tracker["idx"] = idx
        tracker.setdefault("history", []).append({
            "no": idx + 1,
            "account": "Uky" if account_id == UKY_LINKEDIN else "StudioSoft",
            "at": iso,
            "schedule_id": str(sid),
        })
        tracker["history"] = tracker["history"][-30:]
        save_tracker(tracker)
        akun = "LinkedIn Uky" if account_id == UKY_LINKEDIN else "LinkedIn StudioSoft"
        print(f"✅ {akun} — konten #{idx + 1} ({len(teks)} char) @ {date_str} 08:00 WIB ({iso}) -> {sid}")
    except Exception as e:
        print(f"❌ Gagal: {str(e)[:150]}")
        sys.exit(1)


if __name__ == "__main__":
    main()
