#!/usr/bin/env python3
"""Banner fixado 1×3 (posições 1-2-3 do feed) — canvas único 3240×1350.

História em uma fileira: mundo dos monólitos (esq.) → assinatura da marca
(centro) → acessível no notebook (dir.). Cenas dissolvem no mundo contínuo;
tipografia vetorial. Fixação: publicar A,B,C e FIXAR na ordem C → B → A.
"""
import subprocess
from pathlib import Path
from PIL import Image, ImageFilter

P = Path(__file__).parent
CENAS = P.parent/"cenas"
CHROME = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
W, H, N = 1080, 1350, 3
PW = W*N  # 3240

# cena esquerda: monólitos (recorte alto, dissolve pra direita)
mono = Image.open(CENAS/"hero-monolitos.png").convert("RGB")
c = mono.crop((60, 0, 1150, 1024)).resize((1436, 1350), Image.LANCZOS)
c.filter(ImageFilter.UnsharpMask(radius=2, percent=50, threshold=2)).save(P/"b3-esq.png")

# cena direita: notebook (dissolve pra esquerda)
nb = Image.open(CENAS/"bancada-notebook-mao.png").convert("RGB")
n2 = nb.crop((330, 0, 1536, 1024)).resize((1590, 1350), Image.LANCZOS)
n2.filter(ImageFilter.UnsharpMask(radius=2, percent=45, threshold=2)).save(P/"b3-dir.png")

import random
random.seed(23)
linhas = []
for k in range(26):
    x = random.randint(-100, PW+100); y0 = random.randint(1040, 1330)
    seg = random.randint(200, 620); vert = random.choice([-1, 1])*random.randint(24, 80)
    cor = "#E2B15A" if random.random() < 0.7 else "#7FA88A"
    op = round(random.uniform(0.10, 0.32), 2)
    linhas.append(f'<path d="M{x} {y0} h{seg//2} v{vert} h{seg//2}" stroke="{cor}" '
                  f'stroke-opacity="{op}" stroke-width="2.6" fill="none"/>')
    if random.random() < 0.5:
        linhas.append(f'<circle cx="{x+seg//2}" cy="{y0+vert}" r="5" fill="{cor}" opacity="{op+0.25}"/>')
PISO = "".join(linhas)
FIOS = '''<path d="M-40 170 H1350 Q1400 170 1400 220 V420 Q1400 470 1450 470 H2600
 Q2650 470 2650 420 V260 Q2650 210 2700 210 H3280" stroke="#E2B15A" stroke-opacity="0.32"
 stroke-width="3" fill="none"/>
<circle cx="1400" cy="320" r="7" fill="#E2B15A" opacity="0.8"/>
<circle cx="2650" cy="340" r="6" fill="#E2B15A" opacity="0.7"/>'''

HTML = f'''<!DOCTYPE html><html><head><meta charset="UTF-8"><style>
*{{margin:0;padding:0}}
body{{width:{PW}px;height:{H}px;position:relative;overflow:hidden;background:#05070B;
 font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#F4F0E8}}
.ceu{{position:absolute;inset:0;background:
 radial-gradient(1600px 900px at 500px 300px,rgba(226,177,90,.12),transparent 70%),
 radial-gradient(1600px 900px at 2800px 400px,rgba(226,177,90,.13),transparent 70%),
 radial-gradient(1800px 800px at 1620px 200px,rgba(90,110,180,.09),transparent 70%),
 linear-gradient(180deg,#0A0E16 0%,#0B0F14 55%,#05070B 100%)}}
.cidade{{position:absolute;left:0;top:100px;width:{PW}px;height:520px;opacity:.45;background:
 repeating-linear-gradient(90deg,rgba(226,177,90,.07) 0 3px,transparent 3px 88px),
 repeating-linear-gradient(90deg,rgba(150,170,255,.05) 0 2px,transparent 2px 55px);
 -webkit-mask-image:linear-gradient(180deg,transparent,black 30%,transparent)}}
svg.topo{{position:absolute;inset:0}}
.esq{{position:absolute;left:0;top:0;width:1436px;height:1350px;
 -webkit-mask-image:linear-gradient(90deg,black 55%,transparent 98%)}}
.dir{{position:absolute;right:0;top:0;width:1590px;height:1350px;
 -webkit-mask-image:linear-gradient(270deg,black 52%,transparent 98%)}}
.scrim{{position:absolute;left:0;top:430px;width:{PW}px;height:520px;
 background:linear-gradient(rgba(5,7,11,0),rgba(5,7,11,.62) 42%,rgba(5,7,11,.62) 58%,rgba(5,7,11,0))}}
.txt{{position:absolute;width:{PW}px;text-align:center}}
.l1{{top:520px;font-size:118px;font-weight:700;letter-spacing:0;color:#F4F0E8;
 text-shadow:0 4px 40px rgba(0,0,0,.9)}}
.l2{{top:688px;font-size:118px;font-weight:700;letter-spacing:0;
 background:linear-gradient(100deg,#F0C97E,#D9A64B);-webkit-background-clip:text;
 -webkit-text-fill-color:transparent;filter:drop-shadow(0 4px 34px rgba(0,0,0,.95))}}
.sub{{top:880px;font-size:40px;font-weight:600;color:#E2B15A;letter-spacing:1.5px;
 text-shadow:0 3px 22px rgba(0,0,0,.95)}}
.rodape{{position:absolute;bottom:54px;width:{PW}px;text-align:center;font-size:40px;
 color:rgba(244,240,232,.7);letter-spacing:4px;text-shadow:0 2px 18px rgba(0,0,0,.9)}}
</style></head><body>
<div class="ceu"></div><div class="cidade"></div>
<svg class="topo" width="{PW}" height="{H}" xmlns="http://www.w3.org/2000/svg">{FIOS}{PISO}</svg>
<img class="esq" src="b3-esq.png">
<img class="dir" src="b3-dir.png">
<div class="scrim"></div>
<div class="txt l1">NÓS NÃO USAMOS IA.</div>
<div class="txt l2">NÓS ORQUESTRAMOS INTELIGÊNCIAS.</div>
<div class="txt sub">Nascida da prática executiva &nbsp;—&nbsp; sem hype, com senso.</div>
<div class="rodape">@iacomsenso &nbsp;·&nbsp; iacomsenso.com.br</div>
</body></html>'''

(P/"banner3.html").write_text(HTML)
subprocess.run([CHROME, "--headless", "--disable-gpu", f"--screenshot={P}/banner3.png",
                f"--window-size={PW},{H}", "--hide-scrollbars",
                "--force-device-scale-factor=1", f"file://{P}/banner3.html"],
               capture_output=True)
pan = Image.open(P/"banner3.png")
print("banner:", pan.size)
nomes = ["A-esquerda", "B-centro", "C-direita"]
for i in range(N):
    pan.crop((i*W, 0, (i+1)*W, H)).save(P/f"banner3-{nomes[i]}.png")
gap = 8
fita = Image.new("RGB", (N*430 + gap*2 + 32, 538 + 32), (16, 19, 24))
for i in range(N):
    t = Image.open(P/f"banner3-{nomes[i]}.png").resize((430, 538), Image.LANCZOS)
    fita.paste(t, (16 + i*(430+gap), 16))
fita.save(P/"banner3-fita.png")
print("3 tiles + fita ok")
