#!/usr/bin/env python3
"""Gera fundos (backgrounds) com a identidade visual do portal O Oeirense.

Paleta oficial (memoria/reference_ooeirense_paleta_infografico.md):
  navy #0d1f2d | gradiente de marca #127b9d -> #3ea081 -> #62c069
  acento verde #62c069 | cards #13293a | menta #43d3a5 | light wash #d9efeb -> #dff0ec
"""
import os, subprocess, shutil, sys

OUT = os.path.expanduser("~/Downloads/fundos-ooeirense")
TMP = os.path.join(os.path.dirname(os.path.abspath(__file__)), "html")
CHROME = "google-chrome-stable"

TAMANHOS = {
    "feed-1080x1350": (1080, 1350),
    "story-1080x1920": (1080, 1920),
    "quadrado-1080x1080": (1080, 1080),
    "slide-1920x1080": (1920, 1080),
}

GRAO = """
<svg class="grao" xmlns="http://www.w3.org/2000/svg">
  <filter id="n"><feTurbulence type="fractalNoise" baseFrequency="0.8" numOctaves="4" stitchTiles="stitch"/>
  <feColorMatrix type="saturate" values="0"/></filter>
  <rect width="100%" height="100%" filter="url(#n)"/>
</svg>"""

BASE_CSS = """
*{margin:0;padding:0;box-sizing:border-box}
html,body{width:100%;height:100%;overflow:hidden}
.bg{position:fixed;inset:0}
.grao{position:fixed;inset:0;width:100%;height:100%;pointer-events:none}
.linhas{position:fixed;inset:0}
.vinheta{position:fixed;inset:0}
"""

# ---------------------------------------------------------------- variantes
VARIANTES = {}

VARIANTES["aurora"] = """
body{background:#0a1622}
.bg{background:
  radial-gradient(ellipse 130% 90% at 0% -8%,   rgba(18,123,157,.70) 0%, rgba(18,123,157,.18) 42%, rgba(18,123,157,0) 72%),
  radial-gradient(ellipse 140% 95% at 108% 108%, rgba(98,192,105,.52) 0%, rgba(62,160,129,.16) 40%, rgba(62,160,129,0) 70%),
  radial-gradient(ellipse 110% 70% at 88% 12%,  rgba(67,211,165,.20) 0%, rgba(67,211,165,0) 62%),
  linear-gradient(158deg,#0e2739 0%,#0a1826 52%,#07131e 100%);}
.linhas{background:repeating-linear-gradient(135deg,rgba(255,255,255,.016) 0 1px,transparent 1px 9px)}
.vinheta{background:radial-gradient(ellipse 88% 78% at 50% 46%,transparent 26%,rgba(4,10,16,.60) 100%)}
.grao{opacity:.055;mix-blend-mode:overlay}
"""

VARIANTES["faixa"] = """
body{background:#0b1b28}
.bg{background:
  radial-gradient(ellipse 90% 60% at 50% 120%, rgba(98,192,105,.30) 0%, rgba(98,192,105,0) 60%),
  radial-gradient(ellipse 80% 50% at 5% -10%,  rgba(18,123,157,.45) 0%, rgba(18,123,157,0) 60%),
  linear-gradient(155deg,#0e2536 0%,#0b1b28 60%,#08151f 100%);}
.faixa{position:fixed;left:-30%;right:-30%;top:38%;height:26%;
  background:linear-gradient(90deg,#0b4f68 0%,#127b9d 26%,#2c9a8e 52%,#4fb271 76%,#62c069 100%);
  transform:rotate(-11deg);filter:blur(90px);opacity:.55}
.faixa2{position:fixed;left:-30%;right:-30%;top:52%;height:5%;
  background:linear-gradient(90deg,transparent 0%,#127b9d 22%,#3ea081 50%,#62c069 78%,transparent 100%);
  transform:rotate(-11deg);filter:blur(26px);opacity:.5}
.linhas{background:repeating-linear-gradient(135deg,rgba(255,255,255,.014) 0 1px,transparent 1px 9px)}
.vinheta{background:radial-gradient(ellipse 95% 85% at 50% 50%,transparent 34%,rgba(4,10,16,.60) 100%)}
.grao{opacity:.06;mix-blend-mode:overlay}
"""
VARIANTES_EXTRA_HTML = {"faixa": '<div class="faixa"></div><div class="faixa2"></div>'}

VARIANTES["sobrio"] = """
body{background:#0d1f2d}
.bg{background:
  radial-gradient(ellipse 120% 80% at 100% -6%, rgba(18,123,157,.38) 0%, rgba(18,123,157,0) 66%),
  radial-gradient(ellipse 120% 80% at 0% 106%,  rgba(98,192,105,.30) 0%, rgba(98,192,105,0) 66%),
  linear-gradient(170deg,#143047 0%,#0d1f2d 55%,#091723 100%);}
.linhas{background:
  radial-gradient(circle at center, rgba(255,255,255,.11) 1.1px, transparent 1.4px) 0 0/38px 38px}
.vinheta{background:radial-gradient(ellipse 90% 80% at 50% 46%,transparent 32%,rgba(5,12,19,.52) 100%)}
.grao{opacity:.05;mix-blend-mode:overlay}
"""

VARIANTES["claro"] = """
body{background:#eef6f1}
.bg{background:
  radial-gradient(ellipse 120% 85% at -5% -8%,  rgba(18,123,157,.40) 0%, rgba(18,123,157,0) 62%),
  radial-gradient(ellipse 125% 85% at 105% 108%, rgba(98,192,105,.52) 0%, rgba(98,192,105,0) 62%),
  radial-gradient(ellipse 90% 60% at 92% 6%,    rgba(67,211,165,.26) 0%, rgba(67,211,165,0) 60%),
  linear-gradient(160deg,#eaf5f2 0%,#f2f8f3 50%,#e6f2ec 100%);}
.linhas{background:repeating-linear-gradient(135deg,rgba(13,31,45,.022) 0 1px,transparent 1px 9px)}
.vinheta{background:radial-gradient(ellipse 96% 86% at 50% 45%,transparent 44%,rgba(11,79,104,.13) 100%)}
.grao{opacity:.045;mix-blend-mode:multiply}
"""

def html(variante, w, h):
    extra = VARIANTES_EXTRA_HTML.get(variante, "")
    return f"""<!doctype html><html><head><meta charset="utf-8"><style>
{BASE_CSS}{VARIANTES[variante]}
html,body{{width:{w}px;height:{h}px}}
</style></head><body>
<div class="bg"></div>{extra}<div class="linhas"></div><div class="vinheta"></div>{GRAO}
</body></html>"""

def main():
    if not shutil.which(CHROME):
        sys.exit(f"{CHROME} nao encontrado no PATH")
    os.makedirs(OUT, exist_ok=True)
    os.makedirs(TMP, exist_ok=True)
    feitos = []
    for variante in VARIANTES:
        for nome, (w, h) in TAMANHOS.items():
            src = os.path.join(TMP, f"{variante}-{nome}.html")
            dst = os.path.join(OUT, f"ooeirense-fundo-{variante}-{nome}.png")
            with open(src, "w") as f:
                f.write(html(variante, w, h))
            subprocess.run([CHROME, "--headless", "--disable-gpu", "--no-sandbox",
                            "--hide-scrollbars", "--force-device-scale-factor=1",
                            f"--window-size={w},{h}", f"--screenshot={dst}",
                            f"file://{src}"],
                           check=True, capture_output=True)
            feitos.append(dst)
    for p in feitos:
        print(f"{os.path.getsize(p)/1024:8.0f} KB  {p}")

if __name__ == "__main__":
    main()
