"""Il carosello "chi siamo", da fissare in cima al profilo (Paolo, 14/10/2026).

Stessa grafica dei caroselli dei giochi (CSS e funzioni da slide.py), piu' tre
impaginazioni sue: la copertina coi numeri del gruppo, il confronto fra la foto
dall'alto e quella dal tavolo, e le slide con un'immagine dentro una cornice
(una nostra copertina, il sito sul telefono, le storie).

Le foto di Paolo (copertina) e il confronto dall'alto e dal tavolo le sceglie
lui: finche' mancano, al loro posto c'e' un riquadro grigio che lo dice.

    python3 chisiamo.py        scrive out/post/chisiamo_1..8.png

I numeri vengono dal portale (/api/partite/paoloalby), escluse le partite su
Board Game Arena: si rileggono il giorno in cui si monta davvero.
"""
import json
import os
import urllib.request

from slide import (CSS, FOTO, OUT, chiusura, durata_da_portale, foto_sopra,
                   rasterizza)
import slide

BASE = os.path.dirname(FOTO)
CHI = os.path.join(FOTO, "chisiamo")
STORIE = os.path.join(BASE, "out", "storie")
UNBOX = os.path.join(BASE, "out", "unboxing")
POSTPNG = os.path.join(BASE, "out", "post")

# Le foto da Paolo: se il file non c'e' ancora, si mostra il segnaposto.
FOTO_PAOLO = os.path.join(CHI, "paolo.jpg")
FOTO_ALTO = os.path.join(CHI, "dallalto.jpg")
FOTO_TAVOLO = os.path.join(CHI, "daltavolo.jpg")

slide.CSS = CSS + """
.ph{width:100%;height:100%;background:#1c1c1c;display:flex;align-items:center;justify-content:center;
    color:#6a6a6a;font-size:34px;text-align:center;padding:60px;line-height:1.4;border:3px dashed #3a3a3a}
.n3{display:flex}.n3>span{text-align:center;position:relative;flex:1 1 auto}
.n3>span:not(:last-child)::after{content:"";position:absolute;right:0;top:6px;bottom:3px;width:2px;background:#383838}
.cf{padding:0 60px}
.cf .occh{font-size:32px;letter-spacing:.16em;text-transform:uppercase;color:#E0A340;font-weight:700;margin-top:44px}
.cf .strillo{font-family:'Bebas Neue',sans-serif;font-size:96px;line-height:.94;color:#fff;margin-top:30px}
.cf .duo{display:flex;flex-direction:column;gap:26px;margin-top:40px}
.cf .duo .q{height:440px;position:relative;border-radius:14px;overflow:hidden}
.cf .duo .lb{position:absolute;left:0;right:0;bottom:0;padding:70px 30px 22px;font-size:34px;font-weight:600;color:#fff;
    background:linear-gradient(to top,rgba(0,0,0,.85),rgba(0,0,0,0))}
.cf .duo .lb.a{color:#E0A340}
.cf .quadro{display:flex;justify-content:center;margin-top:40px}
.cf .quadro img{width:auto;height:840px;border-radius:22px;box-shadow:0 24px 60px rgba(0,0,0,.9);border:2px solid #2a2a2a}
.cf .quadro.tel img{height:880px;border-radius:40px;border:10px solid #1e1e1e}
.cf .note{font-size:34px;color:#8d8d8d;line-height:1.45;margin-top:auto;margin-bottom:56px;
    border-top:2px solid #383838;padding-top:34px}
.cf .note b{color:#fff;font-weight:600}
.cf .tre{display:flex;gap:30px;justify-content:center;margin-top:44px}
.cf .tre div{flex:1;text-align:center}
.cf .tre img{width:100%;height:auto;border-radius:18px;border:2px solid #2a2a2a;box-shadow:0 20px 44px rgba(0,0,0,.9)}
.cf .tre p{font-size:32px;color:#fff;font-weight:600;margin-top:22px;line-height:1.25}
"""


def _img(path, testo_mancante, stile=""):
    if os.path.exists(path):
        return f'<img src="{path}" style="{stile}">'
    return f'<div class="ph">{testo_mancante}</div>'


def numeri():
    url = "https://bgg-app-weld.vercel.app/api/partite/paoloalby"
    with urllib.request.urlopen(url, timeout=30) as r:
        p = json.load(r)["partite"]
    t = [x for x in p if (x.get("luogo") or "") != "BoardGame Arena"]
    anno = min(x["data"][:4] for x in t)
    return anno, len(t), len({x["gameId"] for x in t})


def migliaia(n):
    return f"{n:,}".replace(",", ".")


def copertina(anno, partite, giochi):
    cella = lambda k, v: f'<span><span class="k">{k}</span><span class="v">{v}</span></span>'
    return (f'<div class="post cop"><div class="foto">'
            f'{_img(FOTO_PAOLO, "Qui la foto di Paolo:<br>in piedi davanti alla libreria,<br>maglietta coi meeple")}'
            f'<div class="sf"></div><div class="tit due">CIAO,<br>SONO PAOLO</div></div>'
            f'<div class="banda"><div class="zc"><div class="cred">bg_perspective · <b>Sanremo</b></div></div>'
            f'<div class="bd"><div class="n3">{cella("Dal", anno)}{cella("Partite", migliaia(partite))}'
            f'{cella("Giochi", giochi)}</div></div></div></div>')


def confronto():
    return ('<div class="post cf"><div class="occh">Come fotografo</div>'
            '<div class="strillo">Dal tavolo,<br>non dall\'alto</div><div class="duo">'
            f'<div class="q">{_img(FOTO_ALTO, "Foto dall alto del tavolo intero<br>(la sceglie Paolo)")}'
            '<div class="lb">Dall\'alto, come quasi tutti</div></div>'
            f'<div class="q">{_img(FOTO_TAVOLO, "La stessa partita,<br>da vicino e ad altezza pezzi")}'
            '<div class="lb a">Ad altezza pezzi, come faccio io</div></div></div></div>')


def scheda():
    cop = os.path.join(POSTPNG, "post4_1.png")    # Cryptid, uscito l'11/9
    return ('<div class="post cf"><div class="occh">Ogni gioco, una scheda</div>'
            f'<div class="quadro"><img src="{cop}"></div>'
            '<div class="note"><b>Giocatori</b>, <b>durata</b> della scatola e <b>peso</b>, '
            'da Leggero a Cinghiale. Poi cos\'è, come gira, la scatola e quanto dura davvero.</div></div>')


def sito():
    tel = os.path.join(CHI, "sito_cryptid.png")
    return ('<div class="post cf"><div class="occh">Il sito</div>'
            f'<div class="quadro tel"><img src="{tel}"></div>'
            '<div class="note">Ogni scheda resta su <b>bg-perspective.it</b>, '
            'in italiano, inglese, francese, tedesco e spagnolo.</div></div>')


def storie():
    ind = os.path.join(STORIE, "01-08 Caylus 1303.png")
    unb = os.path.join(UNBOX, "masterland_copertina.png")
    return ('<div class="post cf"><div class="occh">Nelle storie</div>'
            '<div class="strillo">Fra un post<br>e l\'altro</div><div class="tre">'
            f'<div><img src="{ind}"><p>Indovina il gioco</p></div>'
            f'<div><img src="{unb}"><p>I giochi che<br>arrivano a casa</p></div></div>'
            '<div class="note">E il primo del mese, <b>le partite del mese prima</b>.</div></div>')


def slides():
    anno, partite, giochi = numeri()
    return [
        copertina(anno, partite, giochi),
        foto_sopra(f"{FOTO}/Fcm_fine.jpg", "Il gruppo",
                   f"Ogni settimana gioco con il mio gruppo di amici, a Sanremo. Dal {anno} "
                   f"segniamo ogni partita, con la durata e chi ha vinto: {migliaia(partite)} "
                   f"partite, {giochi} giochi diversi."),
        confronto(),
        scheda(),
        durata_da_portale(246784, "Cryptid in tre<br>finisce in un lampo", accento="bassa"),
        sito(),
        storie(),
        chiusura(f"{FOTO}/Cryptid_fine.jpg", "Che gioco vorresti<br>vedere sul<br>mio tavolo?",
                 "Tre schede a settimana: foto, come gira, quanto dura davvero, per chi è.",
                 "Scrivimelo qui sotto."),
    ]


if __name__ == "__main__":
    for p in rasterizza(slides(), OUT, "chisiamo"):
        print(p)
