#!/usr/bin/env python3
import urllib.request, json
BASE = "https://ota.46-4-121-190.sslip.io"
def call(m, u, d=None, t=None):
    h = {"Content-Type": "application/json"}
    if t: h["Authorization"] = f"Bearer {t}"
    req = urllib.request.Request(u, data=(json.dumps(d).encode() if d else None), headers=h, method=m)
    with urllib.request.urlopen(req, timeout=30) as r: return json.loads(r.read())

tok = call("POST", f"{BASE}/authentication", {"strategy":"local","username":"admin","password":"353fde0a0fe4e8a0b2799e54"})["accessToken"]
NEW = "6a96b96e29b7d373b839df65"  # df65 modal tile fixed height + garden photo ratio + smaller font
r = call("PATCH", f"{BASE}/uploads/{NEW}", {"status":"released"}, tok)
print("release df65:", r.get("status") or r)
d = call("GET", f"{BASE}/uploads", t=tok)
u = d.get("data", d) if isinstance(d, dict) else d
print("--- released now ---")
for x in u:
    if x.get("status") == "released":
        print("RELEASED:", x["_id"], x.get("version"), x.get("updateId"))
        if x["_id"] != NEW:
            d2 = call("PATCH", f"{BASE}/uploads/{x['_id']}", {"status":"obsolete"}, tok)
            print("  demoted:", x["_id"], "->", d2.get("status") or d2)
print("--- final released uploads (should be exactly ONE) ---")
for x in u:
    if x.get("status") == "released":
        print("RELEASED:", x["_id"], x.get("updateId"))
