#!/usr/bin/env python3
"""MESMA ARTE do banner (monolitos -> frase -> notebook, continua), com as
palavras alinhadas aos tiles: as emendas (x=1080, x=2160) caem em ESPACO entre
palavras, nunca em letra. Verificacao automatica das colunas de emenda."""
import subprocess
from pathlib import Path
from PIL import Image, ImageFilter
import numpy as np

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

# mesmo fundo do banner aprovado
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/"al-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/"al-dir.png")

# centros dos tiles
cA,cB,cC = 540,1620,2700

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 400px,rgba(226,177,90,.13),transparent 66%),
 radial-gradient(1400px 1000px at 1620px 560px,rgba(240,201,126,.12),transparent 60%),
 radial-gradient(1500px 900px at 2700px 400px,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 44%,transparent 80%)}}
.dir{{position:absolute;right:0;top:0;width:1660px;height:1350px;
 -webkit-mask-image:linear-gradient(270deg,black 42%,transparent 80%)}}
.scrim{{position:absolute;left:0;top:430px;width:{PW}px;height:470px;
 background:linear-gradient(rgba(5,7,11,0),rgba(5,7,11,.60) 42%,rgba(5,7,11,.60) 58%,rgba(5,7,11,0))}}
.w{{position:absolute;transform:translateX(-50%);text-align:center;font-weight:700;
 letter-spacing:-1px;text-shadow:0 4px 34px rgba(0,0,0,.95),0 2px 10px rgba(0,0,0,.92)}}
.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))}}
.selo{{position:absolute;transform:translateX(-50%);text-align:center;bottom:70px;
 font-size:30px;letter-spacing:3px;color:rgba(244,240,232,.6)}}
.sub{{position:absolute;transform:translateX(-50%);text-align:center;top:900px;
 font-size:34px;font-weight:600;letter-spacing:2px;color:#E2B15A}}
</style></head><body>
<div class="ceu"></div><img class="esq" src="al-esq.png"><img class="dir" src="al-dir.png">
<div class="scrim"></div>

<!-- LINHA 1: NÓS NÃO | USAMOS | IA.  (branco) -->
<div class="w" style="left:{cA}px;top:520px;font-size:98px">NÓS NÃO</div>
<div class="w" style="left:{cB}px;top:520px;font-size:98px">USAMOS</div>
<div class="w" style="left:{cC}px;top:520px;font-size:98px">IA.</div>

<!-- LINHA 2: NÓS | ORQUESTRAMOS | INTELIGÊNCIAS.  (ouro) -->
<div class="w ouro" style="left:{cA}px;top:680px;font-size:84px">NÓS</div>
<div class="w ouro" style="left:{cB}px;top:680px;font-size:80px">ORQUESTRAMOS</div>
<div class="w ouro" style="left:{cC}px;top:680px;font-size:78px">INTELIGÊNCIAS.</div>

<div class="sub" style="left:{cB}px">sem hype · com senso</div>

<div class="selo" style="left:{cA}px">@iacomsenso</div>
<div class="selo" style="left:{cB}px">IA com Senso</div>
<div class="selo" style="left:{cC}px">iacomsenso.com.br</div>
</body></html>'''
(P/"mosaico_alinhado.html").write_text(HTML)
subprocess.run([CHROME,"--headless","--disable-gpu",f"--screenshot={P}/mosaico_alinhado.png",
                f"--window-size={PW},{H}","--hide-scrollbars","--force-device-scale-factor=1",
                f"file://{P}/mosaico_alinhado.html"],capture_output=True)
pan=Image.open(P/"mosaico_alinhado.png")

# VERIFICACAO das colunas de emenda: faixa +-70px em x=1080 e x=2160 deve ser escura
arr=np.array(pan.convert("L"))
def faixa_clara(xc,band=70,thr=150):
    strip=arr[300:1000, xc-band:xc+band]
    return float((strip>thr).mean())
s1,s2=faixa_clara(1080),faixa_clara(2160)
print(f"emenda x=1080 pct_claro={s1:.3f} | x=2160 pct_claro={s2:.3f}")
print("SEGURO" if s1<0.01 and s2<0.01 else "ATENCAO: letra perto da emenda")

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"al-{nomes[i]}.jpg",quality=92)
gap=8
grid=Image.new("RGB",(3*430+2*gap+40,538+40),(0,0,0))
for i in range(N):
    grid.paste(Image.open(P/f"al-{nomes[i]}.jpg").resize((430,538),Image.LANCZOS),(20+i*(430+gap),20))
grid.save(P/"al-GRADE-SIM.png")
print("alinhado gerado")
