#!/usr/bin/env bash
# Genera todo el material de demostración de paginasweboficial.com
# usando exactamente las herramientas que el sitio enseña.
set -euo pipefail

OUT=/Users/casa/paginasweboficial.com/assets/media
F=/System/Library/Fonts/Helvetica.ttc
mkdir -p "$OUT" && cd "$OUT"

stamp() { # marca de agua de sitio en una imagen
  magick "$1" -font "$F" -pointsize 20 -fill "rgba(255,255,255,0.7)" \
    -gravity southeast -annotate +16+12 "paginasweboficial.com" "$1"
}

# ---------- A. La "foto" base (un cuadro generado, nada con derechos) ----
ffmpeg -y -f lavfi -i "gradients=size=1280x853:nb_colors=4:c0=0xf2b134:c1=0xe05c66:c2=0x7b3ff2:c3=0x0a58e0:speed=0.05:duration=1" -frames:v 1 base_raw.png 2>/dev/null
magick base_raw.png \
  -fill "rgba(255,255,255,0.20)" -draw "circle 980,210 980,275" \
  -fill "rgba(255,255,255,0.12)" -draw "circle 1115,340 1115,385" \
  -fill "rgba(255,255,255,0.16)" -draw "circle 215,565 215,620" \
  -fill "rgba(255,255,255,0.10)" -draw "circle 330,150 330,185" \
  -quality 92 foto.jpg
rm base_raw.png

# ---------- B. Cuadrícula de efectos vintage ----------------------------
magick foto.jpg -resize 600 v_original.jpg
magick v_original.jpg -sepia-tone 80% v_sepia.jpg
magick v_original.jpg -modulate 100,55,100 -fill "#c08840" -colorize 12% v_setentas.jpg
magick v_original.jpg -background black -vignette 0x40 v_vineta.jpg
magick v_original.jpg -attenuate 0.3 +noise Gaussian v_grano.jpg
magick v_original.jpg -colorspace Gray -sigmoidal-contrast 4x50% v_bn.jpg
magick montage -font "$F" -pointsize 20 \
  -label "Original" v_original.jpg -label "Sepia" v_sepia.jpg \
  -label "Años 70" v_setentas.jpg -label "Viñeta" v_vineta.jpg \
  -label "Grano" v_grano.jpg -label "Blanco y negro" v_bn.jpg \
  -tile 3x2 -geometry +8+8 -background white vintage-grid.jpg
stamp vintage-grid.jpg
rm v_*.jpg

# ---------- C. GIF con el método de paleta (desde nuestro video) ---------
ffmpeg -y -ss 2.6 -t 4 -i ../video/demo.mp4 -vf "fps=12,scale=480:-1:flags=lanczos,palettegen" paleta.png 2>/dev/null
ffmpeg -y -ss 2.6 -t 4 -i ../video/demo.mp4 -i paleta.png -filter_complex "fps=12,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" demo.gif 2>/dev/null
cp demo.gif demo-optimizado.gif
gifsicle -O3 --lossy=80 demo.gif -o demo-optimizado.gif
rm paleta.png

# ---------- D. Compresión de imágenes con números reales -----------------
magick foto.jpg foto.png
pngquant --quality 65-80 --force --output foto-pngquant.png foto.png
cwebp -quiet -q 80 foto.jpg -o foto.webp
cp foto.jpg foto-jpegoptim.jpg && jpegoptim -q -m85 --strip-all foto-jpegoptim.jpg
{ echo "== Compresión (tamaños reales) =="; du -h foto.png foto-pngquant.png foto.jpg foto-jpegoptim.jpg foto.webp demo.gif demo-optimizado.gif; } > numeros-compresion.txt

# ---------- E. Audio con SoX: melodía, ruido y limpieza ------------------
for n in 392 440 494 587 659; do
  sox -n -r 44100 -b 16 "n$n.wav" synth 0.42 sine "$n" fade t 0.02 0.42 0.08 vol 0.5
done
sox n392.wav n440.wav n494.wav n587.wav n659.wav n494.wav n392.wav melodia_seca.wav
sox melodia_seca.wav melodia.wav reverb 45
DUR=$(soxi -D melodia.wav)
sox -n -r 44100 -b 16 ruido.wav synth "$DUR" whitenoise vol 0.10
sox -m melodia.wav ruido.wav cuerpo.wav
sox -n -r 44100 -b 16 ruido_intro.wav synth 0.6 whitenoise vol 0.10
sox ruido_intro.wav cuerpo.wav con-ruido.wav
sox con-ruido.wav -n trim 0 0.5 noiseprof perfil.prof
sox con-ruido.wav limpio.wav noisered perfil.prof 0.25
ffmpeg -y -i con-ruido.wav -c:a libmp3lame -q:a 4 con-ruido.mp3 2>/dev/null
ffmpeg -y -i limpio.wav -c:a libmp3lame -q:a 4 limpio.mp3 2>/dev/null
rm n*.wav melodia_seca.wav melodia.wav ruido.wav cuerpo.wav ruido_intro.wav perfil.prof con-ruido.wav limpio.wav

# ---------- F. OCR real con Tesseract ------------------------------------
magick -size 920x340 xc:"#f5f1e8" \
  -font "$F" -pointsize 30 -fill "#23201a" -gravity northwest \
  -annotate +48+44 "Nota escaneada de ejemplo:\nlas herramientas gratuitas de la terminal\npueden leer este texto sin pagar un OCR.\n— paginasweboficial.com" \
  -attenuate 0.4 +noise Gaussian -rotate 0.8 -shave 6x6 -quality 88 nota-escaneada.jpg
tesseract nota-escaneada.jpg salida-ocr -l spa 2>/dev/null
mv salida-ocr.txt texto-ocr.txt

# ---------- G. ExifTool: metadatos reales antes y después ----------------
cp foto.jpg meta.jpg
exiftool -q -overwrite_original \
  -Artist="Páginas Web Oficial" -Copyright="CC0" \
  "-GPSLatitude=25 41 11.76" -GPSLatitudeRef=North \
  "-GPSLongitude=100 18 58.0" -GPSLongitudeRef=West meta.jpg
{ echo '$ exiftool -Artist -Copyright -GPSPosition meta.jpg'; exiftool -Artist -Copyright -c "%.4f" -GPSPosition meta.jpg; echo; echo '$ exiftool -all= meta.jpg && exiftool -Artist -Copyright -GPSPosition meta.jpg'; } > metadatos.txt
exiftool -q -overwrite_original -all= meta.jpg
{ exiftool -Artist -Copyright -GPSPosition meta.jpg; echo "(sin salida: no queda nada que leer)"; } >> metadatos.txt
rm meta.jpg

# ---------- H. PDF: compresión real con Ghostscript ----------------------
# Un "escaneo" realista: 3 páginas A4 a 300 dpi con grano de escáner
magick nota-escaneada.jpg -resize 2480x -background "#f5f1e8" -gravity north \
  -extent 2480x3508 -attenuate 0.3 +noise Gaussian -quality 92 pagina.jpg
magick pagina.jpg pagina.jpg pagina.jpg -units PixelsPerInch -density 300 documento.pdf
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH \
  -sOutputFile=documento-comprimido.pdf documento.pdf
rm pagina.jpg
{ echo "== PDF (tamaños reales) =="; du -h documento.pdf documento-comprimido.pdf; qpdf --show-npages documento.pdf | xargs -I{} echo "páginas: {}"; } > numeros-pdf.txt

echo "== LISTO =="
ls -la "$OUT" | awk '{print $5, $9}'
cat numeros-compresion.txt numeros-pdf.txt texto-ocr.txt metadatos.txt
