#!/usr/bin/env bash
# download-lyrics.sh
# Batch download de letras sincronizadas (.lrc) para cada MP3 en ./songs/
# Provider: lrclib.net (free, sin auth, 3M canciones)
# Fallback: NetEase, Megalobiz (via syncedlyrics multi-provider)
#
# Naming requirement: songs/ debe tener archivos con formato
#   "NN - Artista - Título.mp3" o similar (el parser infiere artista+título del filename)
#
# Output: ./lyrics/<mismo-basename>.lrc

set -euo pipefail

PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SONGS_DIR="$PROJECT_ROOT/songs"
LYRICS_DIR="$PROJECT_ROOT/lyrics"

mkdir -p "$LYRICS_DIR"

# Verifica syncedlyrics instalado
if ! command -v syncedlyrics &>/dev/null; then
    echo "[setup] Instalando syncedlyrics via pip user..." >&2
    pip install --user --quiet syncedlyrics || {
        echo "ERROR: pip install syncedlyrics falló. Probá: pipx install syncedlyrics" >&2
        exit 1
    }
fi

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

found=0
missing=0
total=0

shopt -s nullglob
for mp3 in "$SONGS_DIR"/*.{mp3,MP3,m4a,M4A,flac,FLAC,ogg,OGG}; do
    total=$((total + 1))
    base="$(basename "$mp3")"
    stem="${base%.*}"
    out="$LYRICS_DIR/$stem.lrc"

    if [[ -s "$out" ]]; then
        echo "[skip] $stem.lrc ya existe ($(wc -l <"$out") líneas)"
        found=$((found + 1))
        continue
    fi

    # Estrategia de parse del filename:
    # "NN - Artista - Título.ext"  -> search "Artista Título"
    # "Artista - Título.ext"        -> search "Artista Título"
    # otro                          -> search filename entero (peor cobertura)
    search_term="$stem"
    if [[ "$stem" =~ ^[0-9]+[[:space:]]*-[[:space:]]*(.+)[[:space:]]*-[[:space:]]*(.+)$ ]]; then
        search_term="${BASH_REMATCH[1]} ${BASH_REMATCH[2]}"
    elif [[ "$stem" =~ ^(.+)[[:space:]]*-[[:space:]]*(.+)$ ]]; then
        search_term="${BASH_REMATCH[1]} ${BASH_REMATCH[2]}"
    fi

    echo "[search] '$search_term' (de $base)"

    if syncedlyrics "$search_term" -o "$out" -p lrclib netease megalobiz 2>/dev/null && [[ -s "$out" ]]; then
        lines=$(wc -l <"$out")
        echo "  OK -> $out ($lines líneas)"
        found=$((found + 1))
    else
        rm -f "$out"
        echo "  MISS"
        missing=$((missing + 1))
        echo "$base" >>"$LYRICS_DIR/.missing.txt"
    fi
done

echo ""
echo "=========================================="
echo "Resumen: $found/$total con letra | $missing sin"
echo "Faltantes registrados en: $LYRICS_DIR/.missing.txt (si las hay)"
echo ""
echo "Próximo paso: revisar $LYRICS_DIR. Para faltantes,"
echo "introducir letra a mano en formato LRC simple:"
echo "  [00:12.50]Primera línea"
echo "  [00:18.20]Segunda línea"
echo "  ..."
echo "=========================================="
