#!/usr/bin/env bash
# build-playlist.sh
# Autogenera player/playlist.json desde el contenido de songs/ + lyrics/
# Orden alfabético (el naming "NN - Artista - Título" garantiza orden deseado).

set -euo pipefail

PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SONGS_DIR="$PROJECT_ROOT/songs-karaoke"
LYRICS_DIR="$PROJECT_ROOT/lyrics"
OUT="$PROJECT_ROOT/player/playlist.json"

if [[ ! -d "$SONGS_DIR" ]] || [[ -z "$(ls -A "$SONGS_DIR" 2>/dev/null)" ]]; then
    echo "ERROR: $SONGS_DIR está vacío" >&2
    exit 1
fi

{
    echo "["
    first=1
    while IFS= read -r mp3; do
        base="$(basename "$mp3")"
        stem="${base%.*}"
        lrc="$LYRICS_DIR/$stem.lrc"
        has_lrc=false
        [[ -s "$lrc" ]] && has_lrc=true

        # Title visible: limpia prefijo numérico opcional
        title="$stem"
        if [[ "$title" =~ ^[0-9]+[[:space:]]*-[[:space:]]*(.+)$ ]]; then
            title="${BASH_REMATCH[1]}"
        fi

        # Comma separator
        if [[ $first -eq 1 ]]; then
            first=0
        else
            echo ","
        fi

        printf '  {\n'
        printf '    "title": %s,\n' "$(python3 -c "import json,sys; print(json.dumps(sys.argv[1]))" "$title")"
        printf '    "audio": "../songs-karaoke/%s",\n' "$(python3 -c "from urllib.parse import quote; import sys; print(quote(sys.argv[1]))" "$base")"
        if $has_lrc; then
            printf '    "lyrics": "../lyrics/%s.lrc"\n' "$(python3 -c "from urllib.parse import quote; import sys; print(quote(sys.argv[1]))" "$stem")"
        else
            printf '    "lyrics": null\n'
        fi
        printf '  }'
    done < <(find "$SONGS_DIR" -maxdepth 1 -type f \( -iname "*.mp3" -o -iname "*.m4a" -o -iname "*.flac" -o -iname "*.ogg" \) | sort)
    echo ""
    echo "]"
} > "$OUT"

count=$(python3 -c "import json; print(len(json.load(open('$OUT'))))")
with_lyrics=$(python3 -c "import json; data=json.load(open('$OUT')); print(sum(1 for x in data if x['lyrics']))")
echo "Playlist generada: $OUT"
echo "  $count canciones | $with_lyrics con letras sincronizadas"
