#!/usr/bin/env python3
"""Génère les 2 fichiers HTML autonomes de Vignobles en Scène 2026.

  vignobles-en-scene.html        page complète (hero + programme + carte + infos)
  carte-vignobles-en-scene.html  carte interactive seule (à intégrer en iframe / bloc HTML)

Données : evenements.json  |  Sources : src/  |  Images : assets/
Usage   : python build.py
"""
import base64, json, pathlib

ROOT = pathlib.Path(__file__).parent
SRC, ASSETS = ROOT / "src", ROOT / "assets"

def read(p): return (SRC / p).read_text(encoding="utf-8")

def data_uri(path, mime):
    return f"data:{mime};base64," + base64.b64encode((ASSETS / path).read_bytes()).decode()

# Texture papier (bruit SVG très léger) — fidèle au grain du flyer
PAPER_SVG = (
    "<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'>"
    "<filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='2' stitchTiles='stitch'/>"
    "<feColorMatrix values='0 0 0 0 .32  0 0 0 0 .24  0 0 0 0 .2  0 0 0 .07 0'/></filter>"
    "<rect width='100%' height='100%' filter='url(#n)'/></svg>"
)
PAPER = "data:image/svg+xml;base64," + base64.b64encode(PAPER_SVG.encode()).decode()

data = json.loads((ROOT / "evenements.json").read_text(encoding="utf-8"))
data.pop("_note", None)
for ev in data["evenements"]:                      # notes internes : jamais dans le HTML public
    ev.get("reservation", {}).pop("_verifier", None)
DATA = json.dumps(data, ensure_ascii=False, separators=(",", ":")).replace("</", "<\\/")

css_common = read("base.css")
js_common = read("lib.js") + "\n" + read("carte.js")
map_html = read("map.frag.html")

def render(tpl, **kw):
    out = read(tpl)
    for k, v in kw.items():
        out = out.replace("{{" + k + "}}", v)
    assert "{{" not in out, f"placeholder non résolu dans {tpl}"
    return out

page = render(
    "page.tpl.html",
    CSS=css_common + "\n" + read("page.css"),
    JS=js_common + "\n" + read("page.js"),
    MAP=map_html, DATA=DATA, PAPER=PAPER,
    IMG_LOGO=data_uri("logo-vignobles-en-scene.png", "image/png"),
    IMG_VINE=data_uri("vignoble-aquarelle.webp", "image/webp"),
    IMG_PMPV=data_uri("logo-par-monts-et-par-vins.webp", "image/webp"),
)
carte = render("carte.tpl.html", CSS=css_common, JS=js_common, MAP=map_html, DATA=DATA, PAPER=PAPER)

for name, html in (("vignobles-en-scene.html", page), ("carte-vignobles-en-scene.html", carte)):
    (ROOT / name).write_text(html, encoding="utf-8")
    print(f"{name}: {len(html.encode('utf-8'))/1024:.0f} Ko")
