#!/usr/bin/env python3
"""
Scheduler FB Warung Pak Otto — 2x sehari (FIXED 27 Agu 2026)
- Slot 12:00 WIB  → konten ringan / repost dari IG & TikTok Pak Otto
- Slot 19:00 WIB  → bahas artikel website warungpakotto.com + CTA mampir
Aturan:
- FB account: 6a8f9df162caae1e040754d8
- Jam buka: Selasa–Minggu 10.00–21.00 WIB (buka setiap hari) — WAJIB di caption
- WA: 📲 081230777713 (tanpa label)
- Konten UNIK (cek history JSON), link artikel WAJIB valid (200)
"""
import json
import os
import sys
import time
import urllib.request
import urllib.error
from datetime import datetime, timedelta, timezone

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from repliz_client import ReplizClient, ACC

FB_OTTO = ACC.OTTO_FB if hasattr(ACC, "OTTO_FB") else "6a8f9df162caae1e040754d8"
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
LOG_FILE = os.path.join(BASE_DIR, "soto_fb_log.txt")
HISTORY_FILE = os.path.join(BASE_DIR, "soto_fb_history.json")

WIB = timezone(timedelta(hours=7))

ARTIKEL = [
    {"url": "https://www.warungpakotto.com/soto-semarang-10-ribu/",
     "topik": "soto Semarang 10 ribu"},
    {"url": "https://www.warungpakotto.com/soto-semarang-ayam-kampung/",
     "topik": "soto ayam kampung asli"},
    {"url": "https://www.warungpakotto.com/nasi-goreng-babat-kulit/",
     "topik": "nasi goreng babat & kulit"},
    {"url": "https://www.warungpakotto.com/rahasia-nasi-goreng-babat/",
     "topik": "rahasia nasi goreng babat"},
    {"url": "https://www.warungpakotto.com/sate-kerang-telur-puyuh/",
     "topik": "sate kerang telur puyuh"},
    {"url": "https://www.warungpakotto.com/kuliner-sate/",
     "topik": "kuliner sate"},
    {"url": "https://www.warungpakotto.com/cara-menikmati-sate/",
     "topik": "cara menikmati sate"},
    {"url": "https://www.warungpakotto.com/soto-bening-vs-soto-santan/",
     "topik": "soto bening vs soto santan"},
    {"url": "https://www.warungpakotto.com/babat-vs-kulit-nasi-goreng/",
     "topik": "babat vs kulit nasi goreng"},
]

# Konten ringan slot 12:00 — repost/rujukan IG & TikTok Pak Otto
RINGAN = [
    "Ada video seru di Instagram dan TikTok kami — dari dapur, soto yang lagi dimasak, sampai sepiring soto panas siap santap! 🍜 Kapan terakhir kamu mampir?",
    "Buat yang suka nonton konten kuliner, follow Instagram & TikTok @sotosemarang.pakotto ya! Di sana ada video soto ayam kampung, nasi goreng babat, sampai sate kerang. 👀🍜",
    "Video terbaru kami udah tayang di IG & TikTok! Sotonya fresh, kuahnya bening, dan harganya tetap 10 ribu tok. Yuk mampir, atau intip dulu videonya di akun kami! 😋",
    "Penasaran gimana soto kami dimasak tiap pagi? Tonton videonya di Instagram & TikTok @sotosemarang.pakotto! Fresh, natural, tanpa pengawet. 🍗✨",
]


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


def load_history():
    if os.path.exists(HISTORY_FILE):
        with open(HISTORY_FILE) as f:
            return json.load(f)
    return {"artikel": [], "ringan": []}


def save_history(hist):
    with open(HISTORY_FILE, "w") as f:
        json.dump(hist, f, indent=1, ensure_ascii=False)


def cek_link(url):
    """Cek link aktif (200)."""
    try:
        req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
        with urllib.request.urlopen(req, timeout=15) as r:
            return r.status == 200
    except Exception:
        return False


def caption_artikel(art):
    return f"""Buat pecinta kuliner Semarang di Sidoarjo, artikel baru di website kami sudah tayang! 📖

Kali ini kami bahas soal {art['topik']} — lengkap dengan cerita dari dapur Warung Pak Otto.

Semua berawal dari bahan yang fresh dan natural: ayam kampung asli, rempah segar, dan dimasak dengan ketelatenan setiap hari. Hasilnya, soto yang bening, gurih, dan ringan di perut.

Baca selengkapnya di artikel berikut 👇
{art['url']}

Dan kalau sudah baca, mampir langsung ke warung ya! Soto Semarang cuma 10 ribu tok, masih fresh dari dapur kami. 🍜

📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo
🕙 Buka Setiap Hari, 10.00–21.00 WIB
📲 081230777713"""


def caption_ringan():
    return f"""Halo-halo, penggemar kuliner! 👋

{''}

Nggak perlu bingung mau makan siang atau malam di mana — Warung Pak Otto selalu punya pilihan: soto Semarang ayam kampung 10 ribu tok, nasi goreng babat & kulit, sampai sate kerang telur puyuh.

Semua fresh, natural, dan dimasak setiap hari. Yang penting: kenyang tanpa drama! 😄

📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo
🕙 Buka Setiap Hari, 10.00–21.00 WIB
📲 081230777713"""


def main():
    now = datetime.now(WIB)
    today = now.strftime("%Y-%m-%d")
    slot = None

    # Tentukan slot yang sedang diisi berdasarkan jam WIB
    # dipanggil dari cron 2x (12:00 & 19:00 WIB) — argumen: "12" atau "19"
    if len(sys.argv) > 1:
        slot = sys.argv[1]
    else:
        if now.hour < 15:
            slot = "12"
        else:
            slot = "19"

    hist = load_history()
    client = ReplizClient()

    # Jadwal: slot hari ini jam 12:00 WIB = 05:00 UTC, 19:00 WIB = 12:00 UTC
    if slot == "12":
        schedule_at = f"{today}T05:00:00.000Z"
        # Cek sudah terisi hari ini?
        used = hist.get("ringan", [])
        last_date = used[-1].get("date") if used else None
        if last_date == today:
            log(f"Slot 12:00 WIB {today} sudah terisi — skip")
            return
        # Rotasi caption ringan (jangan sama beruntun)
        idx = len(used) % len(RINGAN)
        caption = caption_ringan()
        result = client.schedule_text(FB_OTTO, caption, schedule_at, title="", topic="")
        sid = result.get("scheduleId", "?")
        if result.get("scheduleId"):
            hist["ringan"].append({"date": today, "idx": idx, "scheduleId": sid})
            save_history(hist)
            log(f"✅ Slot 12:00 WIB {today} terjadwal ({sid})")
        else:
            log(f"❌ Gagal schedule 12:00: {result}")
    else:
        schedule_at = f"{today}T12:00:00.000Z"
        used = hist.get("artikel", [])
        if used and used[-1].get("date") == today:
            log(f"Slot 19:00 WIB {today} sudah terisi — skip")
            return
        # Pilih artikel yang belum pernah dipakai
        used_urls = {u.get("url") for u in used}
        pool = [a for a in ARTIKEL if a["url"] not in used_urls]
        if not pool:
            log("Semua artikel sudah pernah dipakai — reset history artikel")
            pool = ARTIKEL
            hist["artikel"] = []
        art = pool[0]
        if not cek_link(art["url"]):
            log(f"⚠️ Link artikel mati, skip: {art['url']}")
            return
        caption = caption_artikel(art)
        result = client.schedule_text(FB_OTTO, caption, schedule_at, title="", topic="")
        sid = result.get("scheduleId", "?")
        if result.get("scheduleId"):
            hist["artikel"].append({"date": today, "url": art["url"], "scheduleId": sid})
            save_history(hist)
            log(f"✅ Slot 19:00 WIB {today} terjadwal — artikel {art['url']} ({sid})")
        else:
            log(f"❌ Gagal schedule 19:00: {result}")


if __name__ == "__main__":
    main()
