#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Soto Semarang Pak Otto — IG Feed + Story Scheduler (zip desain dari Bos, 21/08/2026).

Spek FIX dari Bos:
- 1 FEED + 1 STORY tiap hari di akun IG Warung Pak Otto (ACC.SOTO_IG). TIDAK BOLEH LEBIH.
- Jam: 11.00 WIB (feed jam 11:00, story jam 11:05 biar gak bentrok)
- Zip: 18 gambar feed 4:5 (1080×1350) → 18 hari
- Story: versi 9:16 (1080×1920) dibuat dari gambar yang sama (blur-pad, aman safe zone)
- Caption feed: humanis, sedikit puitis & romantis tentang Semarang (warung Semarang), CTA 081230777713 + hashtags
- Caption story: humanis, singkat, CTA
- Image: file PNG disimpan di server → upload ke WP → URL publik (BUKAN base64)

Akun: ACC.SOTO_IG = 6a86d6e962caae1e04ffedaa
Pemakaian: python3 soto_ig_zip_scheduler.py [--hari 18] [--mulai DD/MM/YYYY] [--dry]
"""
import json, os, sys
from datetime import datetime, timedelta, timezone
from PIL import Image, ImageDraw, ImageFont, ImageFilter

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

WIB = timezone(timedelta(hours=7))
ROOT = os.path.dirname(os.path.abspath(__file__))
ZIP_DIR = os.path.join(ROOT, "soto_ig_zip")
OUT_DIR = os.path.join(ROOT, "soto_ig_story_9x16")
STATE_FILE = os.path.join(ROOT, "soto_ig_zip_state.json")
LOG_FILE = os.path.join(ROOT, "soto_ig_zip_log.txt")

FEED_W, FEED_H = 1080, 1350   # 4:5
STORY_W, STORY_H = 1080, 1920  # 9:16

# ── 18 CAPTION FEED — humanis, puitis, romantis Semarang (unique) ──
# Template: cerita Semarang + soto + CTA + hashtags
FEED_CAPTIONS = [
    # 1
    "Semarang itu kayak kuah soto bening — kelihatannya sederhana, tapi rasanya dalam banget. 🍜\n\n"
    "Kangen kota yang selalu hangat, kangen satu mangkuk soto ayam kampung yang bikin semua rasa capek ilang. Di Warung Pak Otto, kami bawa Semarang ke Sidoarjo.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #SotoSemarang #KulinerSidoarjo #WarungSemarang #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 2
    "Orang bilang, rumah itu bukan tempat — tapi rasa. 🏡\n\n"
    "Buat yang merantau dari Semarang, semangkuk soto kuah bening dengan sate kerang bisa bikin kita ngerasa pulang sebentar. Di sini kami masak dengan hati, persis kayak dapur rumah.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #SotoAyamKampung #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 3
    "Stasiun Tawang, Kota Lama, dan satu mangkuk soto hangat — itu Semarang dalam memoriku. 🚂✨\n\n"
    "Kadang yang kita rindukan bukan cuma kota, tapi momen-momen kecil di dalamnya. Yuk, kita buat memori baru — mulai dari satu mangkuk soto di Warung Pak Otto.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #StasiunTawang #KotaLama #KangenSemarang #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 4
    "Kangen lumpia, kangen soto Bangkong, kangen nongkrong di sekitar Tugu Muda. 🗼\n\n"
    "Semarang punya caranya sendiri buat dirindukan. Dan kami, mencoba menghadirkan sedikit rasa Semarang itu di Sidoarjo — lewat satu mangkuk soto yang hangat dan jujur.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #TuguMuda #KangenSemarang #SotoSemarang #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 5
    "Ada yang bilang, cinta itu kayak kuah soto Semarang — bening, tapi penuh rasa. 💛\n\n"
    "Gak perlu ribet, gak perlu berlebihan. Cukup hangat, cukup tulus, dan bikin kenyang. Itu yang kami coba sajikan di Warung Pak Otto setiap hari.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #SotoAyamKampung #KangenSemarang #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 6
    "Malam di Semarang itu selalu punya cerita — dan biasanya cerita itu ditemani semangkuk soto hangat. 🌙\n\n"
    "Buat kalian yang lagi jauh dari Semarang, semoga satu suapan soto kami bisa sedikit mengobati rasa kangen. Dimasak fresh, disajikan dengan senyum.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #MakanMalam #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 7
    "Kenangan itu kayak bawang goreng — sedikit aja, tapi bikin semuanya makin terasa. 🧅\n\n"
    "Semarang selalu punya tempat di hati. Dan buat yang kangen, kami siapkan semangkuk soto yang rasanya kayak pulang. Mampir yuk, cak!\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #SotoSemarang #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 8
    "Kalau Semarang punya Lawang Sewu, kami punya satu pintu yang selalu terbuka buat kamu. 🚪💛\n\n"
    "Pintu Warung Pak Otto, tepatnya. Masuk, duduk, dan biarkan semangkuk soto menghangatkan harimu. Cerita Semarang, rasa Sidoarjo.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #LawangSewu #KangenSemarang #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 9
    "Ada dua hal yang bikin orang kangen Semarang: udaranya yang sejuk, dan sotonya yang hangat. 🍲\n\n"
    "Kami bawa yang kedua ke Sidoarjo — dengan ayam kampung asli, kuah bening, dan bumbu yang dimasak sepenuh hati. Semarang, dalam satu mangkuk.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #SotoAyamKampung #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 10
    "Aku inget kita pernah bercanda di kedai kecil sekitar Kota Lama, sambil nunggu sate kerang matang. 😄🦪\n\n"
    "Momen-momen kayak gitu yang bikin Semarang selalu dirindukan. Yuk, buat momen baru — cerita lama, rasa yang sama, di Warung Pak Otto.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KotaLama #KangenSemarang #SateKerang #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 11
    "Semarang itu kota yang romantis dengan caranya sendiri — pelan, hangat, dan penuh kenangan. 🥹\n\n"
    "Kayak soto kami: gak perlu teriak, tapi selalu ninggalin kesan. Datang, rasakan, dan pulang dengan senyum. Itu janji kami.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #KulinerSidoarjo #SotoSemarang #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 12
    "Kadang pulang itu bukan soal jarak, tapi soal rasa yang familiar. 🏠\n\n"
    "Satu suapan soto ayam kampung dengan kuah bening — dan tiba-tiba kita kembali ke Semarang. Buat yang merantau, ini pelukan hangat dalam mangkuk.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #SotoAyamKampung #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 13
    "Di Semarang, hujan selalu terasa lebih hangat kalau ditemani soto. ☔🍜\n\n"
    "Kami pengen rasa hangat itu bisa dirasakan di Sidoarjo juga. Kuah bening yang mengepul, sate kerang yang wangi — siap menemani harimu.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #HujanDanSoto #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 14
    "Orang Semarang bilang: urip iku urup — hidup itu harus menyala dan memberi manfaat. 🔥\n\n"
    "Itu juga filosofi kami di dapur: masak dengan api yang hidup, hati yang tulus, dan rasa yang bermanfaat buat yang makan. Soto, teman cerita, dan kehangatan.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #FilosofiJawa #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 15
    "Bukan cuma soto — kami juga jual kenangan. Satu mangkuk, satu cerita, satu senyum. 🥣\n\n"
    "Setiap pelanggan yang duduk di Warung Pak Otto adalah bagian dari cerita kami. Terima kasih sudah singgah dan jadi bagian dari rasa kangen Semarang.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #WarungSemarang #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 16
    "Semarang mengajarkan kami: hal sederhana yang dilakukan tulus, akan selalu terasa istimewa. 💛\n\n"
    "Itu sebabnya kami masak tiap hari dengan resep yang sama — tulus. Soto ayam kampung, kuah bening, dan sambal yang nendang. Simpel, tapi penuh rasa.\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #SotoAyamKampung #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 17
    "Ada yang bilang, soto Semarang itu terapi jiwa. Kami setuju. 😌🍜\n\n"
    "Kuahnya yang ringan, hangatnya yang menenangkan, dan rasanya yang jujur — semua itu kayak pelukan buat hati yang lelah. Mampir, yuk!\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #SotoSemarang #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
    # 18
    "Sampai kapan pun, Semarang akan selalu jadi rumah yang kita rindukan. Dan sampai kapan pun, kami akan tetap masak dengan rasa rumah itu. 🏡\n\n"
    "Terima kasih sudah jadi bagian dari perjalanan Warung Pak Otto. Sampai ketemu di mangkuk soto berikutnya!\n\n"
    "📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo\n"
    "⏰ Selasa–Minggu 10.00–21.00 WIB\n\n"
    "📲 081230777713\n\n"
    "#SotoSemarangPakOtto #KangenSemarang #TerimaKasih #KulinerSidoarjo #kulinermalamsidoarjo #kulinermurahsidoarjo",
]

# ── 18 CAPTION STORY — singkat, humanis ──
STORY_CAPTIONS = [
    "Semarang dalam satu mangkuk 🍜\nHangat, bening, dan penuh rasa. Mampir yuk!\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Rasa rumah buat yang merantau 🏡\nSoto ayam kampung, kuah bening khas Semarang.\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Kota Lama, Stasiun Tawang, dan soto hangat — kangen Semarang? Ini obatnya! 🚂\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Kangen Tugu Muda? Kangen lumpia? Soto kami siap nemenin 🤗\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Cinta itu kayak kuah soto — bening tapi penuh rasa 💛\nMampir yuk!\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Malam yang hangat dimulai dari soto 🍜\n📍 Graha Anggrek Mas C-16, Pagerwojo\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Kenangan kecil, rasa yang besar 🧅\nSoto Semarang asli di Sidoarjo!\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Satu pintu selalu terbuka buat kamu 🚪💛\nSoto hangat, hati tulus.\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Udara Semarang yang sejuk, soto yang hangat — dua-duanya bikin kangen 😌\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Kedai kecil, cerita besar, sate kerang juara 🦪\nKangen Kota Lama? Mampir sini!\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Semarang romantis dengan caranya sendiri 🥹\nSama kayak soto kami.\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Pulang itu soal rasa yang familiar 🏠\nSatu suapan, langsung terasa.\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Hujan + soto = hangat ☔🍜\nMampir sebelum hujan turun!\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Urip iku urup — hidup harus memberi manfaat 🔥\nKami masak dengan hati.\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Kami jual kenangan dalam mangkuk 🥣\nTerima kasih sudah singgah!\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Hal sederhana yang tulus, selalu istimewa 💛\nSoto kami, buktinya.\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Soto Semarang: terapi jiwa yang hangat 😌🍜\nMampir yuk!\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
    "Semarang rumah yang dirindukan 🏡\nDan kami selalu masak dengan rasa itu.\n📲 081230777713 #kulinermalamsidoarjo #kulinermurahsidoarjo",
]


def make_story_9x16(feed_path, out_path):
    """Buat versi story 9:16 dari feed 4:5 (blur-pad, aman safe zone)."""
    feed = Image.open(feed_path).convert("RGB")
    # Background blur
    bg = feed.resize((STORY_W, STORY_H), Image.LANCZOS)
    bg = bg.filter(ImageFilter.GaussianBlur(30))
    bg = bg.filter(ImageFilter.GaussianBlur(20))
    # Gambar feed di tengah, tinggi penuh 1920 → lebar = 1920 * (1080/1350) = 1536 > 1080 (kepotong)
    # Pakai lebar penuh 1080 → tinggi = 1080 * (1350/1080) = 1350, sisakan atas/bawah
    feed_h = int(FEED_W * (STORY_H / STORY_W) * 0.9)  # ~1600, keep aman
    feed_resized = feed.resize((FEED_W, feed_h), Image.LANCZOS)
    y = (STORY_H - feed_h) // 2
    bg.paste(feed_resized, (0, y))
    bg.save(out_path, "PNG")
    return out_path


def main():
    import argparse
    ap = argparse.ArgumentParser()
    ap.add_argument("--hari", type=int, default=18)
    ap.add_argument("--mulai", default=None, help="DD/MM/YYYY")
    ap.add_argument("--dry", action="store_true")
    args = ap.parse_args()

    os.makedirs(OUT_DIR, exist_ok=True)
    client = ReplizClient()

    start = datetime.now(WIB).date()
    if args.mulai:
        start = datetime.strptime(args.mulai, "%d/%m/%Y").date()

    state = {}
    if os.path.exists(STATE_FILE):
        try:
            state = json.load(open(STATE_FILE))
        except Exception:
            state = {}
    last_date = state.get("scheduled_until")
    if last_date:
        last_dt = datetime.strptime(last_date, "%Y-%m-%d").date()
        if start <= last_dt:
            start = last_dt + timedelta(days=1)
            print(f"⚠️ Sudah ada jadwal sampai {last_date} — mulai dari {start}")

    print(f"📅 Jadwal {args.hari} hari mulai {start.strftime('%d/%m/%Y')} 11:00 WIB — IG Warung Pak Otto (1 Feed + 1 Story/hari)")
    ok = fail = 0

    for i in range(args.hari):
        tgl = start + timedelta(days=i)
        n = i + 1
        feed_path = os.path.join(ZIP_DIR, f"{n}.png")
        if not os.path.exists(feed_path):
            print(f"  ❌ [{n}/18] Gambar tidak ada: {feed_path}")
            fail += 1
            continue

        feed_cap = FEED_CAPTIONS[i % len(FEED_CAPTIONS)]
        story_cap = STORY_CAPTIONS[i % len(STORY_CAPTIONS)]
        # CTA FIX dari Bos (21/08 malam): kangen Semarang → ajak MAMPIR langsung + cek link bio
        CTA = ("Buat kamu yang kangen suasana Semarang, sumonggo MAMPIR langsung ke Warung Pak Otto! 😊\n"
               "Soto hangat + sate kerang udah siap nemenin ceritamu. Cek link bio buat lokasi lengkapnya!")
        if "Cek link bio" not in feed_cap:
            # sisipkan sebelum hashtag
            idx_ht = feed_cap.rfind("#")
            feed_cap = feed_cap[:idx_ht].rstrip() + "\n\n" + CTA + "\n\n" + feed_cap[idx_ht:]
        if "Cek link bio" not in story_cap:
            story_cap = story_cap.rstrip() + "\n" + CTA
        story_path = os.path.join(OUT_DIR, f"soto_story_{n:02d}.png")
        make_story_9x16(feed_path, story_path)

        print(f"  [{n}/18] {tgl.strftime('%d/%m/%Y')} — Feed 11:00 + Story 11:05")
        if args.dry:
            print(f"      🖼️ DRY: {feed_path} + {story_path}")
            continue

        # FEED — jam 11:00 WIB (gambar asli 4:5, file PNG dari server)
        res_f = client.schedule_image(
            ACC.SOTO_IG, feed_cap, f"{tgl.isoformat()}T11:00:00+07:00",
            feed_path, filename=f"soto_feed_{n:02d}.png",
            title="Soto Feed", topic="Feed")
        sid_f = res_f.get("scheduleId") if res_f and (res_f.get("ok") or res_f.get("scheduleId")) else None

        # STORY — jam 11:05 WIB (versi 9:16) — type "story" (upload WP → URL publik)
        wp_url_s = client.upload_to_wp(story_path, filename=f"soto_story_{n:02d}.png")
        if wp_url_s:
            res_s = client.create_schedule(
                ACC.SOTO_IG, story_cap, f"{tgl.isoformat()}T11:05:00+07:00",
                title="Soto Story", topic="Story", type_="story",
                medias=[{"url": wp_url_s, "type": "image", "alt": f"soto_story_{n:02d}.png"}])
        else:
            res_s = {"ok": False, "error": "WP upload gagal"}
        # Pastikan type story — Repliz butuh type "story" untuk IG story

        if sid_f and res_s.get("scheduleId"):
            ok += 1
            print(f"      ✅ Feed {sid_f} | Story {res_s.get('scheduleId')}")
        else:
            fail += 1
            print(f"      ❌ Feed: {str(res_f)[:100]} | Story: {str(res_s)[:100]}")

    state["scheduled_until"] = (start + timedelta(days=args.hari - 1)).isoformat()
    state["updated"] = datetime.now(WIB).isoformat()
    json.dump(state, open(STATE_FILE, "w"), indent=2)
    print(f"\n📊 Total: {ok} hari OK, {fail} gagal")


if __name__ == "__main__":
    main()
