#!/usr/bin/env python3
"""
LEIT FB & LinkedIn Scheduler — cron job harian.
Posting otomatis ke Facebook & LinkedIn LEIT tiap jam.
1 konten per slot (beda platform beda waktu biar gak tabrakan).
Konten sama dengan Threads tapi format caption FB/LinkedIn (bisa lebih panjang).
"""
import json, urllib.request, sys, os, hashlib
from datetime import datetime, timezone, timedelta

AUTH = 'NDY1NDYwOTg2Njpzb09vSDJJUnk2QmthSXJIU0FmMW5HbHkyUmNvaXc5Wg=='
HEADERS = {'Authorization': AUTH, 'Content-Type': 'application/json'}
BASE = 'https://api.repliz.com'

ACCOUNTS = {
    'fb': '6a618e9262caae1e04e99518',
    'linkedin': '6a60451662caae1e04e91040',
}

LOG_FILE = '/home/mantapman/.openclaw/workspace-atun/leit_fb_linkedin_log.txt'
STATE_FILE = '/home/mantapman/.openclaw/workspace-atun/leit_fb_linkedin_state.json'

WIB = timezone(timedelta(hours=7))

SLOTS = [
    (5, 0), (8, 0), (11, 0), (14, 0), (17, 0), (20, 0), (23, 0)
]

NICHES = [
    "English Communication Mastery",
    "Leadership & Character Development",
    "Public Speaking & Communication Skills",
    "Education & Parenting",
    "Student Transformation",
    "Career & Professional English",
    "Study Abroad Preparation",
    "Future Skills",
    "LEIT Method & Experience",
    "LEIT Surabaya Lifestyle",
    "TOEFL & IELTS Preparation",
    "Info Program & Promo LEIT",
]

# ============================================================
# BANK KONTEN FB/LinkedIn — versi caption panjang (2-4 paragraf)
# ============================================================
CONTENT_POOL = [
    # ---------- Series 0: Perkenalan ----------
    (
        "Selamat datang di halaman resmi LEIT Surabaya! 👋\n\n"
        "LEIT (Leadership-English Institute) adalah lembaga kursus dan pelatihan Bahasa Inggris yang berlokasi di Surabaya. Kami hadir untuk membantu anak-anak, remaja, mahasiswa, dan para profesional mengembangkan kemampuan berkomunikasi dalam Bahasa Inggris dengan percaya diri.\n\n"
        "Apa yang membuat LEIT berbeda? Kami tidak hanya mengajarkan Bahasa Inggris, tetapi juga menanamkan nilai-nilai kepemimpinan, pengembangan karakter, dan soft skills abad ke-21.\n\n"
        "LEIT bernaung di bawah Billion Innovation Group, dan memiliki dua cabang di Surabaya Timur (Pakuwon Town Square) dan Surabaya Barat (Waterplace Residence).\n\n"
        "Kami percaya setiap orang punya potensi untuk menjadi komunikator global yang handal. Mari belajar dan tumbuh bersama! 🌱\n\n"
        "#LEITSurabaya #KursusBahasaInggris #EnglishCourse #Leadership"
    ),
    # ---------- Series 1: English Communication Mastery ----------
    (
        "Menguasai Bahasa Inggris tidak harus dimulai dengan grammar yang sempurna. Banyak orang justru terjebak pada teori hingga merasa tidak percaya diri saat berbicara.\n\n"
        "Kunci utama komunikasi adalah keberanian untuk mencoba. Di LEIT, kami menyediakan lingkungan belajar yang suportif dengan metode speaking-based.\n\n"
        "Mulailah dengan langkah kecil: latihan berbicara tentang topik favorit Anda setiap hari selama 5 menit. Rekam dan dengarkan untuk melihat kemajuan sendiri.\n\n"
        "Konsistensi lebih penting daripada durasi! 💪\n\n"
        "#EnglishCommunication #SpeakingConfidence #LEITSurabaya #BelajarInggris"
    ),
    (
        "Banyak siswa bertanya: bagaimana cara agar tidak kaku saat berbicara Bahasa Inggris?\n\n"
        "Jawabannya adalah memahami konteks. Bahasa Inggris formal dan informal memiliki perbedaan dalam pemilihan kata dan struktur kalimat.\n\n"
        "Di LEIT, siswa diajarkan untuk menyesuaikan gaya bicara sesuai situasi — apakah sedang presentasi formal, wawancara kerja, atau sekadar ngobrol santai.\n\n"
        "Yang terpenting: jangan takut salah. Kesalahan adalah bagian dari proses belajar. 😊\n\n"
        "#EnglishTips #CommunicationSkills #LEITSurabaya #BelajarInggris"
    ),
    (
        "Membangun kebiasaan berbahasa Inggris bisa dimulai dari hal sederhana:\n\n"
        "✅ Ganti bahasa ponsel ke Bahasa Inggris\n✅ Baca berita singkat Bahasa Inggris setiap pagi\n✅ Tulis jurnal harian sederhana dalam Bahasa Inggris\n✅ Nonton film dengan subtitle Bahasa Inggris\n✅ Bicara sendiri di depan cermin\n\n"
        "Kuncinya adalah konsistensi, bukan durasi. 5 menit setiap hari lebih baik daripada 2 jam seminggu sekali.\n\n"
        "Sudah punya kebiasaan belajar Bahasa Inggris sendiri? Bagikan di kolom komentar! 👇\n\n"
        "#EnglishHabits #DailyEnglish #LEITSurabaya #BelajarBahasaInggris"
    ),
    # ---------- Series 2: Leadership & Character Development ----------
    (
        "Kepemimpinan bukan soal jabatan. Kepemimpinan adalah kemampuan mengambil inisiatif, bertanggung jawab, dan menginspirasi orang lain.\n\n"
        "Di LEIT, nilai-nilai kepemimpinan ditanamkan melalui ICISD Values: Integrity, Compassion, Independence, Self Discipline, dan Determination.\n\n"
        "Nilai-nilai ini dibangun secara bertahap melalui setiap sesi pembelajaran. Siswa belajar untuk jujur, peduli, mandiri, disiplin, dan pantang menyerah.\n\n"
        "Karena kami percaya: pemimpin sejati lahir dari karakter yang kuat.\n\n"
        "#Leadership #CharacterBuilding #LEITSurabaya #PengembanganDiri"
    ),
    (
        "Salah satu aspek penting dalam pengembangan karakter adalah keberanian keluar dari zona nyaman.\n\n"
        "Banyak anak terbiasa dalam situasi aman. Saat dihadapkan tantangan baru, mereka cenderung mundur.\n\n"
        "LEIT membantu anak secara perlahan membangun keberanian — dari presentasi singkat di depan kelas, hingga debat dan diskusi kelompok.\n\n"
        "Setiap keberhasilan kecil meningkatkan kepercayaan diri. Seiring waktu, mereka tumbuh jadi pribadi tangguh.\n\n"
        "Apa tantangan terbesar yang pernah dihadapi anak Anda? 👇\n\n"
        "#CharacterDevelopment #GrowthMindset #LEITSurabaya #Parenting"
    ),
    (
        "Karakter yang kuat adalah fondasi kesuksesan jangka panjang — lebih penting dari nilai akademis semata.\n\n"
        "Banyak orang sukses bukan karena IQ tinggi, tapi karena kegigihan, kejujuran, dan kemampuan bekerja sama.\n\n"
        "Di LEIT, pengembangan karakter menjadi bagian tak terpisahkan dari setiap program. Setiap sesi dirancang menumbuhkan sikap positif.\n\n"
        "Lulusan berkarakter lebih siap menghadapi tantangan hidup dibanding yang unggul secara akademis saja.\n\n"
        "#Karakter #SoftSkills #LEITSurabaya #PengembanganAnak"
    ),
    # ---------- Series 3: Public Speaking ----------
    (
        "Berbicara di depan umum adalah keterampilan berharga — tidak hanya di akademis, tapi juga profesional dan kehidupan sehari-hari.\n\n"
        "Banyak orang gugup saat berbicara di depan banyak orang. Itu wajar. Yang membedakan adalah bagaimana mengelola rasa gugup.\n\n"
        "Tips dari LEIT: mulai dengan bicara di depan cermin. Perhatikan ekspresi wajah dan bahasa tubuh. Latihan teratur bikin percaya diri.\n\n"
        "Pernah merasa gugup presentasi? Share pengalaman Anda! 👇\n\n"
        "#PublicSpeaking #PresentationSkill #LEITSurabaya #KepercayaanDiri"
    ),
    (
        "Komunikasi efektif tidak hanya tentang apa yang dikatakan, tapi juga cara menyampaikannya.\n\n"
        "Elemen penting public speaking:\n✅ Kontak mata — tunjukkan ketulusan\n✅ Intonasi suara — variasi nada cegah monoton\n✅ Bahasa tubuh — gerakan natural perkuat pesan\n✅ Pengaturan napas — kurangi ketegangan\n\n"
        "Semua ini bisa dipelajari dan diasah lewat latihan konsisten. Di LEIT, siswa berlatih public speaking secara bertahap — dari presentasi singkat hingga tampil di acara besar.\n\n"
        "#PublicSpeaking #CommunicationSkills #LEITSurabaya"
    ),
    (
        "Storytelling adalah salah satu teknik komunikasi paling kuat. Kenapa? Karena manusia secara alami tertarik pada cerita.\n\n"
        "Informasi yang dibungkus cerita lebih mudah diingat dan lebih berdampak secara emosional. Dalam presentasi, sisipkan cerita pendek yang relevan — audiens akan lebih terlibat.\n\n"
        "LEIT mengajarkan teknik storytelling sebagai bagian kurikulum public speaking. Siswa belajar menyusun cerita menarik dan menyampaikannya dengan percaya diri.\n\n"
        "Punya cerita menarik yang pernah disampaikan dalam presentasi? 😊\n\n"
        "#Storytelling #PublicSpeaking #LEITSurabaya #Komunikasi"
    ),
    # ---------- Series 4: Education & Parenting ----------
    (
        "Masa kanak-kanak adalah periode emas belajar bahasa. Anak usia dini memiliki kemampuan alami menyerap bunyi dan intonasi bahasa asing.\n\n"
        "Orang tua punya peran penting. Cara sederhana yang bisa dilakukan:\n✅ Putar lagu Inggris saat bermain\n✅ Bacakan buku cerita bergambar Bahasa Inggris\n✅ Nonton tayangan edukatif berbahasa Inggris bersama\n✅ Ajak anak menyebut benda sekitar dalam Bahasa Inggris\n\n"
        "Kuncinya: jadikan belajar sebagai aktivitas menyenangkan, bukan tekanan.\n\n"
        "#Parenting #AnakBelajar #EnglishForKids #LEITSurabaya"
    ),
    (
        "Memilih tempat kursus Bahasa Inggris untuk anak adalah keputusan penting.\n\n"
        "Hal yang perlu diperhatikan:\n✅ Metode pengajaran — speaking-based atau teori saja?\n✅ Kualifikasi pengajar — berpengalaman dengan anak?\n✅ Rasio guru-siswa — kelas tidak terlalu besar\n✅ Kurikulum — sesuai usia dan kebutuhan anak\n✅ Lingkungan belajar — nyaman dan aman?\n\n"
        "LEIT menjawab semua ini: metode speaking-based, kelas kecil, pengajar berpengalaman.\n\n"
        "Ada kriteria lain yang Anda pertimbangkan? 👇\n\n"
        "#EnglishCourse #KursusAnak #LEITSurabaya #ParentingTips"
    ),
    (
        "Peran orang tua tidak berhenti setelah mendaftarkan anak ke kursus.\n\n"
        "Keterlibatan aktif sangat mempengaruhi keberhasilan belajar:\n✅ Tanyakan yang dipelajari hari ini dengan antusias\n✅ Puji usaha, bukan hanya hasil\n✅ Sediakan waktu khusus belajar di rumah\n✅ Hubungkan pelajaran dengan kegiatan sehari-hari\n\n"
        "Saat anak melihat orang tua peduli, motivasi mereka meningkat secara alami.\n\n"
        "Bagaimana cara Anda mendukung belajar anak di rumah? 😊\n\n"
        "#Parenting #PendidikanAnak #LEITSurabaya #DukunganOrangTua"
    ),
    # ---------- Series 5: Career English ----------
    (
        "Di era global, Bahasa Inggris bukan nilai tambah — tapi kebutuhan mendesak di dunia profesional.\n\n"
        "Banyak perusahaan menjadikan Bahasa Inggris syarat utama rekrutmen. Fakta di lapangan: banyak kandidat yang memenuhi syarat teknis justru gugur di wawancara Bahasa Inggris.\n\n"
        "Bukan karena tidak mampu akademis, tapi kurang percaya diri menyampaikan gagasan dalam Bahasa Inggris secara lisan.\n\n"
        "LEIT membantu mahasiswa dan profesional mempersiapkan diri menghadapi tantangan ini melalui program English for Specific Purposes.\n\n"
        "#CareerEnglish #Professional #EnglishForWork #LEITSurabaya"
    ),
    (
        "Menulis email profesional dalam Bahasa Inggris perlu pemahaman etika dan format yang tepat:\n✅ Subjek email jelas dan informatif\n✅ Salam pembuka sesuai hubungan profesional\n✅ Isi ringkas, padat, mudah dipahami\n✅ Penutup sopan dan profesional\n\n"
        "Kesalahan umum: penggunaan bahasa terlalu informal atau terlalu kaku. Di LEIT, siswa belajar menulis email profesional dengan studi kasus situasi kerja nyata.\n\n"
        "Pernah kesulitan menulis email Bahasa Inggris di tempat kerja? 👇\n\n"
        "#BusinessEnglish #EmailEtiquette #LEITSurabaya #ProfessionalDevelopment"
    ),
    (
        "Wawancara kerja Bahasa Inggris sering jadi momok. Persiapan matang sangat membantu:\n\n"
        "'Tell me about yourself' — ceritakan diri Anda secara profesional\n'Why do you want to work here?' — jelaskan alasan melamar\n'What are your strengths and weaknesses?' — kenali kelebihan & area pengembangan\n\n"
        "LEIT menyediakan program persiapan wawancara kerja dengan simulasi langsung dan feedback membangun.\n\n"
        "Tertarik ikut simulasi wawancara Bahasa Inggris? 😊\n\n"
        "#JobInterview #CareerPrep #EnglishForWork #LEITSurabaya"
    ),
    # ---------- Series 6: Study Abroad ----------
    (
        "Bermimpi studi ke luar negeri? Persiapan matang dan terencana adalah kunci:\n\n"
        "📌 Riset negara & universitas sesuai minat\n📌 Persiapan tes IELTS/TOEFL\n📌 Penyusunan dokumen: esai & surat rekomendasi\n📌 Eksplorasi beasiswa\n📌 Persiapan wawancara\n\n"
        "LEIT siap membantu persiapan IELTS/TOEFL dan simulasi wawancara beasiswa.\n\n"
        "Punya rencana studi ke luar negeri? Share mimpi Anda! 🌍\n\n"
        "#StudyAbroad #IELTS #TOEFL #LEITSurabaya"
    ),
    (
        "Tips persiapan IELTS/TOEFL dari LEIT:\n\n"
        "Listening: biasakan dengerin podcast atau berita Inggris setiap hari\nReading: latih baca cepat artikel akademis\nWriting: pelajari struktur penulisan & manajemen waktu\nSpeaking: rekam latihan bicara, evaluasi pengucapan & kelancaran\n\n"
        "Konsistensi adalah kunci. Latihan rutin lebih baik daripada belajar marathon seminggu sekali.\n\n"
        "Sedang persiapan IELTS/TOEFL? Semangat! 💪\n\n"
        "#IELTSTips #TOEFLPreparation #StudyAbroad #LEITSurabaya"
    ),
    (
        "Manfaat studi di luar negeri:\n✅ Perluas wawasan & perspektif global\n✅ Kembangkan kemandirian & adaptasi\n✅ Bangun jaringan pertemanan internasional\n✅ Tingkatkan penguasaan Bahasa Inggris\n✅ Nilai jual di pasar kerja global\n\n"
        "Persiapan butuh usaha besar, tapi hasilnya sebanding.\n\n"
        "Apa negara impian Anda untuk studi? 🌏\n\n"
        "#StudyAbroad #InternationalStudent #LEITSurabaya #FutureLeader"
    ),
    # ---------- Series 7: Future Skills ----------
    (
        "Dunia berubah cepat. Pekerjaan hari ini mungkin lenyap dalam dekade mendatang.\n\n"
        "Generasi muda perlu dibekali keterampilan relevan:\n✅ Berpikir kritis & analitis\n✅ Kreativitas & inovasi\n✅ Kecerdasan emosional & empati\n✅ Adaptasi & lifelong learning\n✅ Kolaborasi lintas budaya\n\n"
        "Di LEIT, keterampilan ini diintegrasikan dalam setiap program.\n\n"
        "Skill apa yang menurut Anda paling penting untuk masa depan? 👇\n\n"
        "#FutureSkills #21stCenturySkills #LEITSurabaya #Pendidikan"
    ),
    (
        "Literasi digital sama pentingnya dengan baca-tulis di era ini.\n\n"
        "Bukan cuma bisa pakai gadget, tapi:\n✅ Pahami cara kerja algoritma & medsos\n✅ Mampu memilah informasi valid vs hoaks\n✅ Jaga etika & keamanan di dunia maya\n✅ Kelola jejak digital positif\n\n"
        "LEIT membantu siswa jadi pengguna teknologi yang cerdas dan bertanggung jawab.\n\n"
        "Sudah biasakan anak menggunakan teknologi dengan bijak? 😊\n\n"
        "#DigitalLiteracy #LiterasiDigital #LEITSurabaya #PendidikanDigital"
    ),
    (
        "Lifelong learning — tidak ada kata terlambat belajar hal baru.\n\n"
        "Cara menerapkannya:\n✅ Baca buku atau artikel setiap hari\n✅ Ikuti kursus baru berkala\n✅ Gabung komunitas pengembangan diri\n✅ Terbuka pada feedback\n\n"
        "Di LEIT, kami mendorong setiap siswa punya rasa ingin tahu tinggi dan semangat belajar tak pernah padam.\n\n"
        "Apa hal baru yang sedang Anda pelajari? 🧠\n\n"
        "#LifelongLearning #BelajarSepanjangHayat #LEITSurabaya"
    ),
]

CONTENT_POOL_FB = CONTENT_POOL[:]  # Sama untuk FB, bisa ditambah konten khusus FB nanti

def log(msg):
    ts = datetime.now(WIB).strftime('[%Y-%m-%d %H:%M:%S WIB]')
    line = f'{ts} {msg}'
    print(line)
    with open(LOG_FILE, 'a') as f:
        f.write(line + '\n')

def load_state():
    try:
        with open(STATE_FILE) as f:
            return json.load(f)
    except: return {'fb': {'date': '', 'last_idx': -1, 'posted_today': []}, 'linkedin': {'date': '', 'last_idx': -1, 'posted_today': []}}

def save_state(s):
    with open(STATE_FILE, 'w') as f:
        json.dump(s, f)

def post_to_repliz(account_id, content, schedule_time):
    """Post single content ke Repliz"""
    schedule_utc = schedule_time.astimezone(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.000Z')
    
    title = content.split('\n\n')[0][:60] if '\n\n' in content else content[:60]
    payload = json.dumps({
        'title': title,
        'description': content,
        'type': 'text',
        'medias': [],
        'scheduleAt': schedule_utc,
        'accountId': account_id,
    }).encode()
    
    url = BASE + '/public/schedule'
    req = urllib.request.Request(url, data=payload, headers=HEADERS, method='POST')
    try:
        with urllib.request.urlopen(req, timeout=180) as resp:
            data = json.loads(resp.read())
            sid = data.get('scheduleId') or data.get('_id') or 'ok'
            return sid
    except Exception as e:
        log(f'❌ Gagal post: {e}')
        return None

def process_platform(platform_key, account_id, now, today_str, now_total, state, pool_name):
    plat_state = state.get(platform_key, {'date': '', 'last_idx': -1, 'posted_today': []})
    
    # Reset jika hari baru
    if plat_state.get('date') != today_str:
        plat_state = {'date': today_str, 'last_idx': plat_state.get('last_idx', -1), 'posted_today': []}
    
    # Cari slot berikutnya
    next_slot = None
    for h, m in SLOTS:
        st = h * 60 + m
        if st > now_total and st not in plat_state.get('posted_today', []):
            next_slot = (h, m)
            break
    
    if next_slot is None:
        log(f'{platform_key.upper()}: ⏭️ Semua slot terisi / tidak ada slot.')
        state[platform_key] = plat_state
        return
    
    # Pilih konten berikutnya (bergilir)
    last_idx = plat_state.get('last_idx', -1)
    next_idx = (last_idx + 1) % len(pool_name)
    content = pool_name[next_idx]
    
    schedule_time = datetime(now.year, now.month, now.day, next_slot[0], next_slot[1], tzinfo=WIB)
    
    sid = post_to_repliz(account_id, content, schedule_time)
    
    if sid:
        plat_state['last_idx'] = next_idx
        posted = plat_state.get('posted_today', [])
        posted.append(next_slot[0] * 60 + next_slot[1])
        plat_state['posted_today'] = posted
        log(f'{platform_key.upper()}: ✅ Posted di slot {next_slot[0]:02d}:{next_slot[1]:02d} WIB — Series {next_idx+1}')
    else:
        log(f'{platform_key.upper()}: ❌ Gagal posting di slot {next_slot[0]:02d}:{next_slot[1]:02d} WIB')
    
    state[platform_key] = plat_state

def main():
    now = datetime.now(WIB)
    today_str = now.strftime('%Y-%m-%d')
    now_total = now.hour * 60 + now.minute
    
    log(f'🔄 LEIT FB & LinkedIn Check — {today_str}')
    
    state = load_state()
    
    # FB — 1 konten per slot (text)
    process_platform('fb', ACCOUNTS['fb'], now, today_str, now_total, state, CONTENT_POOL_FB)
    
    # LinkedIn — 1 konten per slot (text)
    process_platform('linkedin', ACCOUNTS['linkedin'], now, today_str, now_total, state, CONTENT_POOL)
    
    save_state(state)
    log(f'✅ Selesai check {today_str}')

if __name__ == '__main__':
    main()
