#!/bin/bash
set -e

DIR="/var/www/html/eventi"
DISPLAY_NUM=":99"
SCREEN_SIZE="1920x1080x24"
OUTPUT_VIDEO="$DIR/eventi.mp4"
TEMP_DIR="$DIR/tmp_pages"
MUSIC_FILE=""
TEMP_FINAL="$DIR/temp_final.mp4"
SECS_PER_PAGE=10
FPS=25

CHROME_BIN="chromium-browser"
command -v "$CHROME_BIN" >/dev/null 2>&1 || CHROME_BIN="chromium"
command -v "$CHROME_BIN" >/dev/null 2>&1 || CHROME_BIN="/snap/bin/chromium"

echo "========================================="
echo "GENERAZIONE VIDEO EVENTI"
echo "========================================="

echo "Pulizia..."
pkill -f "Xvfb $DISPLAY_NUM" 2>/dev/null || true
pkill -f chromium 2>/dev/null || true
rm -f /tmp/.X99-lock
rm -rf "$TEMP_DIR"
mkdir -p "$TEMP_DIR"

echo "Avvio Xvfb..."
Xvfb $DISPLAY_NUM -screen 0 $SCREEN_SIZE -ac +extension RANDR >/dev/null 2>&1 &
XVFB_PID=$!
export DISPLAY=$DISPLAY_NUM
sleep 3

DISPLAY=:99 xset s off 2>/dev/null || true
DISPLAY=:99 xset -dpms 2>/dev/null || true
DISPLAY=:99 xset s noblank 2>/dev/null || true

echo "Recupero numero pagine..."
TOTAL_PAGES=$(curl -s "http://127.0.0.1/eventi/eventi_dazn.php?api=1&t=$(date +%s)" | grep -o '"pages":[0-9]*' | grep -o '[0-9]*' || echo "1")
[ -z "$TOTAL_PAGES" ] || [ "$TOTAL_PAGES" -lt 1 ] && TOTAL_PAGES=$(curl -s "http://127.0.0.1/eventi/eventi_dazn.php?api=1&t=$(date +%s)" | grep -o '"pages":[0-9]*' | grep -o '[0-9]*' || echo "1")
echo "Pagine: $TOTAL_PAGES"

for PAGE in $(seq 1 $TOTAL_PAGES); do
    echo "Registro pagina $PAGE / $TOTAL_PAGES..."
    URL="http://127.0.0.1/eventi/eventi_dazn.php?page=${PAGE}&t=$(date +%s)"
    SEGMENT="$TEMP_DIR/page_$(printf '%03d' $PAGE).mp4"

    pkill -f chromium 2>/dev/null || true
    sleep 1

    "$CHROME_BIN" \
      --no-sandbox \
      --disable-gpu \
      --disable-dev-shm-usage \
      --disable-infobars \
      --disable-translate \
      --disable-features=Translate,TranslateUI \
      --disable-background-timer-throttling \
      --disable-renderer-backgrounding \
      --autoplay-policy=no-user-gesture-required \
      --window-size=1920,1080 \
      --window-position=0,0 \
      --force-device-scale-factor=1 \
      --kiosk \
      "$URL" >/dev/null 2>&1 &
    CHROME_PID=$!
    sleep 7

    ffmpeg -y \
      -f x11grab \
      -video_size 1920x1080 \
      -framerate $FPS \
      -i ${DISPLAY_NUM}.0 \
      -t $SECS_PER_PAGE \
      -vf "crop=1920:1080:0:0,format=yuv420p" \
      -c:v libx264 \
      -preset veryfast \
      -crf 22 \
      -pix_fmt yuv420p \
      "$SEGMENT" 2>/dev/null

    kill $CHROME_PID 2>/dev/null || true
    echo "Pagina $PAGE OK"
done

echo "Unisco segmenti..."
LIST="$TEMP_DIR/list.txt"
> "$LIST"
for f in $(ls "$TEMP_DIR"/page_*.mp4 | sort); do
    echo "file '$f'" >> "$LIST"
done

CONCAT_VIDEO="$TEMP_DIR/concat.mp4"
ffmpeg -y -f concat -safe 0 -i "$LIST" -c copy "$CONCAT_VIDEO" 2>/dev/null

if [ -f "$MUSIC_FILE" ]; then
    echo "Aggiungo audio..."
    DURATION=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$CONCAT_VIDEO" 2>/dev/null | cut -d. -f1 || echo 60)
    ffmpeg -y \
      -i "$CONCAT_VIDEO" \
      -stream_loop -1 -i "$MUSIC_FILE" \
      -map 0:v:0 -map 1:a:0 \
      -c:v copy -c:a aac -b:a 192k -ar 44100 -ac 2 \
      -t "$DURATION" \
      "$TEMP_FINAL" 2>/dev/null
    mv -f "$TEMP_FINAL" "$OUTPUT_VIDEO"
else
    cp -f "$CONCAT_VIDEO" "$OUTPUT_VIDEO"
fi

echo "Pulizia finale..."
kill $XVFB_PID 2>/dev/null || true
pkill -f chromium 2>/dev/null || true
rm -rf "$TEMP_DIR"

DURATION=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$OUTPUT_VIDEO" 2>/dev/null | cut -d. -f1 || echo "?")
echo "========================================="
echo "VIDEO CREATO: $OUTPUT_VIDEO"
echo "Pagine: $TOTAL_PAGES | Durata: ${DURATION}s"
echo "========================================="
