#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Fix jadwal Repliz yang URL image-nya 404 (tanpa /openclaw-img/).
- Update jadwal pending image/story/album: URL mantapserver tanpa openclaw-img → tambahkan openclaw-img/
- Recreate jadwal feed_07 yang terhapus saat test (soto_feed_07 28 Agu)
"""
import sys, json, urllib.request, urllib.error
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE

BASE_NEW = "https://mantapserver.tail3947bb.ts.net/openclaw-img/"

def get(path):
    req = urllib.request.Request(BASE + path, headers=HEADERS)
    return json.load(urllib.request.urlopen(req, timeout=30))

def put(sid, payload):
    req = urllib.request.Request(f"{BASE}/public/schedule/{sid}",
                                 data=json.dumps(payload).encode(),
                                 headers={**HEADERS, "Content-Type": "application/json"},
                                 method="PUT")
    urllib.request.urlopen(req, timeout=30)

def post(payload):
    req = urllib.request.Request(f"{BASE}/public/schedule",
                                 data=json.dumps(payload).encode(),
                                 headers={**HEADERS, "Content-Type": "application/json"})
    return json.load(urllib.request.urlopen(req, timeout=30))

# 1) Update semua jadwal pending image/story/album
fixed, skipped = 0, 0
page = 1
while page <= 32:
    raw = get(f"/public/schedule?page={page}&limit=200")
    docs = raw.get("docs", raw)
    if not docs:
        break
    for s in docs:
        if s.get("status") != "pending" or s.get("type") not in ("image", "story", "album"):
            continue
        medias = s.get("medias") or []
        changed = False
        for m in medias:
            u = m.get("url", "")
            if u.startswith("https://mantapserver.tail3947bb.ts.net/") and "/openclaw-img/" not in u:
                m["url"] = BASE_NEW + u.rsplit("/", 1)[-1]
                changed = True
        if changed:
            payload = {
                "accountId": s.get("accountId"),
                "title": s.get("title", ""),
                "description": s.get("description", ""),
                "topic": s.get("topic", ""),
                "type": s.get("type", ""),
                "medias": medias,
                "scheduleAt": s.get("scheduleAt"),
                "replies": s.get("replies") or [],
            }
            try:
                put(s["_id"], payload)
                fixed += 1
                print(f"  ✅ FIX {s['_id']} {s.get('scheduleAt')} {s.get('type')} → {medias[0]['url'][:80]}")
            except Exception as e:
                skipped += 1
                print(f"  ❌ GAGAL {s['_id']}: {e}")
    if len(docs) < 200:
        break
    page += 1

print(f"\nTotal di-fix: {fixed} | gagal: {skipped}")

# 2) Recreate feed_07 (terhapus saat test DELETE)
try:
    res = post({
        "accountId": "6a86d6e962caae1e04ffedaa",
        "title": "Soto Feed",
        "description": "Semarang itu kayak kuah soto bening — kelihatannya sederhana, tapi rasanya dalam banget. 🍜\n\nKangen 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",
        "topic": "Feed",
        "type": "image",
        "medias": [{"url": BASE_NEW + "soto_feed_07.jpg", "type": "image", "alt": "soto_feed_07.jpg"}],
        "scheduleAt": "2026-08-28T04:00:00.000Z",
        "replies": [],
    })
    print(f"✅ RECREATE feed_07: {res.get('_id', res)}")
except Exception as e:
    print(f"❌ RECREATE feed_07 gagal: {e}")
