#!/usr/bin/env python3
"""Mosaico 3 tiles 4:5 (1080x1350) com MARGEM de segurança — texto auto-contido
por tile, emenda cai no fundo (nunca em letra). Fundo cinematográfico contínuo.
Cada tile: conteúdo dentro de x[tile+SAFE, tile+1080-SAFE], y[SAFE_Y, 1350-SAFE_Y]."""
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
SAFE = 150   # margem horizontal por tile (bordas/emenda)

mono = Image.open(CENAS/"hero-monolitos.png").convert("RGB")
mono.crop((40,0,1180,1024)).resize((1560,1350),Image.LANCZOS)\
    .filter(ImageFilter.UnsharpMask(2,50,2)).save(P/"m-esq.png")
nb = Image.open(CENAS/"bancada-notebook-mao.png").convert("RGB")
nb.crop((360,0,1536,1024)).resize((1660,1350),Image.LANCZOS)\
    .filter(ImageFilter.UnsharpMask(2,45,2)).save(P/"m-dir.png")

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(1500px 900px at 540px 420px,rgba(226,177,90,.14),transparent 66%),
 radial-gradient(1300px 1000px at 1620px 675px,rgba(240,201,126,.10),transparent 60%),
 radial-gradient(1500px 900px at 2700px 420px,rgba(90,120,200,.10),transparent 66%),
 linear-gradient(180deg,#0A0E16,#0B0F14 55%,#05070B)}}
.esq{{position:absolute;left:0;top:0;width:1560px;height:1350px;
 -webkit-mask-image:linear-gradient(90deg,black 46%,transparent 82%)}}
.dir{{position:absolute;right:0;top:0;width:1660px;height:1350px;
 -webkit-mask-image:linear-gradient(270deg,black 44%,transparent 82%)}}
/* legibilidade: leve escurecida atras dos textos laterais */
.veu{{position:absolute;top:360px;height:660px;width:1080px;
 background:radial-gradient(ellipse 60% 55% at 50% 50%,rgba(3,5,9,.82),rgba(3,5,9,.4) 60%,transparent 78%)}}
.bloco{{position:absolute;width:{W-2*SAFE}px;text-align:center}}
.h{{font-weight:700;letter-spacing:-1px;line-height:1.12;
 text-shadow:0 4px 34px rgba(0,0,0,.95),0 2px 10px rgba(0,0,0,.9)}}
.ouro{{background:linear-gradient(100deg,#F0C97E,#D9A64B);-webkit-background-clip:text;
 -webkit-text-fill-color:transparent;filter:drop-shadow(0 4px 30px rgba(0,0,0,.95))}}
.mono{{font-size:210px;font-weight:800;letter-spacing:4px}}
.dot{{color:#E2B15A}}
.tag{{font-size:40px;letter-spacing:8px;color:#E2B15A;font-weight:600;margin-top:10px}}
.selo{{position:absolute;bottom:70px;width:{W-2*SAFE}px;text-align:center;
 font-size:30px;letter-spacing:3px;color:rgba(244,240,232,.62)}}
</style></head><body>
<div class="ceu"></div>
<img class="esq" src="m-esq.png"><img class="dir" src="m-dir.png">

<!-- TILE A (esq) centro x=540 -->
<div class="veu" style="left:{540-540}px"></div>
<div class="bloco h" style="left:{SAFE}px;top:520px;font-size:96px">NÓS NÃO<br>USAMOS IA.</div>
<div class="selo" style="left:{SAFE}px">@iacomsenso</div>

<!-- TILE B (centro) centro x=1620 : monograma -->
<div class="bloco" style="left:{1080+SAFE}px;top:470px">
  <div class="mono">I<span class="dot">·</span>A</div>
  <div class="tag">COM SENSO</div>
</div>
<div class="selo" style="left:{1080+SAFE}px">sem hype · com senso</div>

<!-- TILE C (dir) centro x=2700 -->
<div class="veu" style="left:{2160}px"></div>
<div class="bloco h ouro" style="left:{2160+SAFE}px;top:452px;font-size:88px">NÓS<br>ORQUESTRAMOS<br>INTELIGÊNCIAS.</div>
<div class="selo" style="left:{2160+SAFE}px">iacomsenso.com.br</div>
</body></html>'''
(P/"mosaico_margem.html").write_text(HTML)
subprocess.run([CHROME,"--headless","--disable-gpu",f"--screenshot={P}/mosaico_margem.png",
                f"--window-size={PW},{H}","--hide-scrollbars","--force-device-scale-factor=1",
                f"file://{P}/mosaico_margem.html"],capture_output=True)
pan=Image.open(P/"mosaico_margem.png"); print("canvas:",pan.size)
nomes=["A-esq","B-centro","C-dir"]
for i in range(N):
    pan.crop((i*W,0,(i+1)*W,H)).convert("RGB").save(P/f"mm-{nomes[i]}.jpg",quality=92)

# simulacao da grade COM emenda (gap real ~ que o insta mostra) + crop leve de seguranca
gap=6
sim=Image.new("RGB",(3*430+2*gap+40,538+40),(0,0,0))
for i in range(N):
    t=Image.open(P/f"mm-{nomes[i]}.jpg").resize((430,538),Image.LANCZOS)
    sim.paste(t,(20+i*(430+gap),20))
sim.save(P/"mm-GRADE-SIM.png")
print("mosaico margem gerado + grade simulada")
