"""Carica file su Vercel Blob al posto di un `vercel deploy` su bgp-immagini.

Il vecchio modo (vedi git log di sito.py prima del 2026-09-17) rideployava tutta
la cartella `bgp-immagini/` a ogni pubblicazione: ogni deploy superato finiva in
un cestino recuperabile per un mese, e con tre uscite a settimana ha riempito il
tetto gratuito di storage di Vercel (10 GB, per team). `vercel blob put` invece
carica un file alla volta senza creare un deployment: niente cestino, niente
limite di storage a parte quello del Blob store stesso (molto più alto e
separato). Vedi [[pipeline-pubblicazione]].

Il token sta in `sito/.env` come `BLOB_READ_WRITE_TOKEN`, non si stampa mai.
"""
import os, subprocess

QUI = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_URL = "https://hndm54gxglhs3g3v.public.blob.vercel-storage.com"


def _token():
    for riga in open(os.path.join(QUI, "sito", ".env"), encoding="utf-8"):
        if riga.startswith("BLOB_READ_WRITE_TOKEN="):
            return riga.strip().split("=", 1)[1].strip('"')
    raise SystemExit("BLOB_READ_WRITE_TOKEN manca in sito/.env")


def carica(percorso_locale, pathname_remoto):
    """Carica un file su Blob (pubblico, sovrascrive se esiste) e torna l'URL."""
    # `--rw-token` non viene letto dalla CLI (verificato il 17/9): il token va
    # passato come variabile d'ambiente, non come flag.
    ambiente = {**os.environ, "BLOB_READ_WRITE_TOKEN": _token()}
    r = subprocess.run(
        ["vercel", "blob", "put", percorso_locale, "--pathname", pathname_remoto,
         "--access", "public", "--allow-overwrite", "true",
         "--scope", "paoloalbys-projects"],
        capture_output=True, text=True, env=ambiente,
    )
    if r.returncode != 0:
        # Mai lasciare che l'eccezione porti con se' r.args: conterrebbe il token
        # in chiaro (successo il 17/9, corretto subito dopo).
        raise SystemExit(f"vercel blob put fallito su {pathname_remoto}:\n{r.stderr}")
    return f"{BASE_URL}/{pathname_remoto}"


def carica_slide_post(chiave):
    """Carica su Blob le slide di `out/post/{chiave}_N.png` (il carosello da mettere
    su Buffer) e torna la lista degli URL nell'ordine delle slide.

    Prima si copiavano a mano dentro `bgp-immagini/` e si rideployava tutto: stesso
    problema di `sito.prepara_immagini`, stessa soluzione. Vedi [[pipeline-pubblicazione]].
    """
    cartella = os.path.join(QUI, "out", "post")
    file = sorted(
        (f for f in os.listdir(cartella) if f.startswith(f"{chiave}_")),
        key=lambda f: int(f.rsplit("_", 1)[1].split(".")[0]),
    )
    if not file:
        raise SystemExit(f"nessuna slide out/post/{chiave}_*.png")
    return [carica(os.path.join(cartella, f), f"post/{f}") for f in file]


def demo():
    import tempfile
    with tempfile.NamedTemporaryFile("w", suffix=".txt", delete=False) as f:
        f.write("prova blob.py")
        percorso = f.name
    url = carica(percorso, "prova/demo.txt")
    assert url == f"{BASE_URL}/prova/demo.txt"
    os.unlink(percorso)
    print("ok", url)


if __name__ == "__main__":
    demo()
