#!/usr/bin/env python3
"""Ubah SEMUA hashtag di caption pending (main + replies) jadi huruf kecil — semua akun."""
import sys, json, re, urllib.request
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE

def lowercase_hashtags(text):
    """#StudioSoft -> #studiosoft (huruf kecil semua)"""
    return re.sub(r'#([A-Za-z0-9_]+)', lambda m: '#' + m.group(1).lower(), text)

def get(sid):
    req = urllib.request.Request(f"{BASE}/public/schedule/{sid}", headers=HEADERS)
    with urllib.request.urlopen(req, timeout=30) as r:
        return json.load(r)

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")
    with urllib.request.urlopen(req, timeout=30) as r:
        return r.status

# kumpulkan semua pending
pend = []
for p in range(1, 90):
    raw = urllib.request.Request(f"{BASE}/public/schedule?page={p}&limit=100", headers=HEADERS)
    with urllib.request.urlopen(raw, timeout=30) as r:
        docs = json.load(r)["docs"]
    for d in docs:
        if (d.get('status') or '').lower() == 'pending':
            pend.append(d)
print(f"total pending: {len(pend)}")

def has_upper_hashtag(text):
    return bool(re.search(r'#([A-Za-z0-9_]*[A-Z][A-Za-z0-9_]*)', text))

updated = 0
for d in pend:
    desc = d.get("description") or ""
    replies = d.get("replies") or []
    desc_new = lowercase_hashtags(desc)
    replies_new = []
    for rep in replies:
        rep = dict(rep)
        rep["text"] = lowercase_hashtags(rep.get("text") or "")
        replies_new.append(rep)
    # cek apakah ada yang berubah (huruf besar di hashtag)
    changed = desc_new != desc or any(a.get("text") != b.get("text") for a, b in zip(replies_new, replies))
    if not changed and not has_upper_hashtag(desc + ' ' + ' '.join(r.get("text","") for r in replies)):
        continue
    if desc_new == desc and replies_new == replies:
        # cek manual
        if not has_upper_hashtag(desc):
            continue
    payload = {
        "accountId": d.get("accountId"),
        "title": d.get("title", ""),
        "description": desc_new,
        "topic": d.get("topic", ""),
        "type": d.get("type", ""),
        "medias": d.get("medias") or [],
        "scheduleAt": d.get("scheduleAt"),
        "replies": replies_new,
    }
    try:
        put(d["id"], payload)
        updated += 1
        acc = (d.get("account") or {}).get("name", "?")
        print(f"  ✅ {d.get('scheduleAt')} | {acc}")
    except Exception as e:
        print(f"  ❌ {d['id']}: {e}")
print(f"\n📊 Updated: {updated} | total pending: {len(pend)}")
