#!/usr/bin/env bash
set -euo pipefail

while IFS= read -r asset; do
  [ -n "$asset" ] || continue
  source="public/$asset"
  bundled=".output/public/$asset"
  if [ ! -s "$source" ]; then
    echo "ERRO: asset de origem ausente: $source" >&2
    exit 1
  fi
  if [ ! -s "$bundled" ]; then
    echo "ERRO: asset ausente no bundle de produção: $bundled" >&2
    exit 1
  fi
done < scripts/static-assets.manifest

python3 - <<'PYCODE'
import re
from pathlib import Path

source_files = [
    path
    for root in (Path("src"), Path("public"))
    for path in root.rglob("*")
    if path.is_file() and path.suffix.lower() in {".ts", ".tsx", ".js", ".jsx", ".css", ".html", ".svg"}
]
forbidden = re.compile(
    r"/__l5e/assets-v1/|\.lovable\.app/|fonts\.(?:googleapis|gstatic)\.com/|wp-content/|youtube\.com/embed/",
    re.IGNORECASE,
)
references = set()
for path in source_files:
    content = path.read_text(errors="ignore")
    if forbidden.search(content):
        raise SystemExit(f"ERRO: dependência remota de mídia em {path}")
    references.update(re.findall(r"(?<![A-Za-z0-9])(/(?:assets|fonts|videos)/[A-Za-z0-9._/-]+)", content))

missing = [url for url in sorted(references) if not (Path(".output/public") / url.lstrip("/")).is_file()]
if missing:
    raise SystemExit("ERRO: referências locais sem arquivo no bundle:\n" + "\n".join(missing))
manifest_count = sum(1 for item in Path("scripts/static-assets.manifest").read_text().splitlines() if item.strip())
print(f"{len(references)} referências locais e {manifest_count} assets do manifesto conferidos.")
PYCODE

node -e 'if (JSON.parse(require("node:fs").readFileSync(".output/nitro.json", "utf8")).preset !== "node-server") process.exit(1)'
test -s .output/server/index.mjs
echo "Assets locais presentes no bundle; preset Nitro node-server confirmado."
