#!/usr/bin/env bash
# download-from-spotify.sh
# Descarga canciones desde una URL de Spotify al folder songs/
# y genera letras + playlist automáticamente.
#
# MODOS:
#   Sin credenciales  — descarga vía YouTube usando metadata Spotify (gratis)
#   Con credenciales  — accede a playlists privadas / mejor metadata
#   Con Premium       — descarga audio directo desde Spotify (calidad máxima)
#
# CONFIGURACIÓN (opcional):
#   Crea scripts/.spotify.env con tus credenciales (ver .spotify.env.example)
#
# USO:
#   bash scripts/download-from-spotify.sh <url-spotify>
#   bash scripts/download-from-spotify.sh https://open.spotify.com/playlist/...
#   bash scripts/download-from-spotify.sh https://open.spotify.com/track/...

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
SONGS_DIR="$PROJECT_ROOT/songs"
ENV_FILE="$SCRIPT_DIR/.spotify.env"

# ── Colores ─────────────────────────────────────────────────────────────
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
ok()   { echo -e "${GREEN}[OK]${NC}  $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
err()  { echo -e "${RED}[ERR]${NC} $*" >&2; }

# ── Argumento ────────────────────────────────────────────────────────────
if [[ $# -eq 0 ]]; then
    echo "Uso: bash scripts/download-from-spotify.sh <spotify-url>"
    echo ""
    echo "Ejemplos:"
    echo "  https://open.spotify.com/track/4cOdK2wGLETKBW3PvgPWqT"
    echo "  https://open.spotify.com/playlist/37i9dQZF1DXbTxeAdrVG2l"
    echo "  https://open.spotify.com/album/..."
    echo ""
    echo "Config opcional: scripts/.spotify.env (copia .spotify.env.example)"
    exit 1
fi

SPOTIFY_URL="$1"

# ── Cargar credenciales si existen ───────────────────────────────────────
CLIENT_ID=""
CLIENT_SECRET=""
PREMIUM_USERNAME=""
PREMIUM_PASSWORD=""
USE_PREMIUM_AUDIO=false

if [[ -f "$ENV_FILE" ]]; then
    # shellcheck disable=SC1090
    source "$ENV_FILE"
    ok "Credenciales cargadas desde .spotify.env"
else
    warn "Sin .spotify.env — usando acceso público (playlists públicas solamente)"
    warn "Crea scripts/.spotify.env desde .spotify.env.example para más opciones"
fi

# ── Verificar spotdl ─────────────────────────────────────────────────────
if ! command -v spotdl &>/dev/null; then
    warn "spotdl no encontrado. Instalando..."
    pip install --break-system-packages -q spotdl
fi

# ── Contar canciones previas para numeración ─────────────────────────────
mkdir -p "$SONGS_DIR"
existing=$(find "$SONGS_DIR" -maxdepth 1 -iname "*.mp3" | wc -l)
start_num=$((existing + 1))

# ── Construir comando spotdl ─────────────────────────────────────────────
SPOTDL_ARGS=(
    "$SPOTIFY_URL"
    --output "$SONGS_DIR/{list_position:02d} - {artists} - {title}"
    --format mp3
    --bitrate 192k
    --no-cache
    --threads 2
    --lyrics-provider lrclib
    --save-file /dev/null
)

# Credenciales de app Spotify (para playlists privadas / mejor metadata)
if [[ -n "$CLIENT_ID" && -n "$CLIENT_SECRET" ]]; then
    SPOTDL_ARGS+=(--client-id "$CLIENT_ID" --client-secret "$CLIENT_SECRET")
    ok "Usando Spotify App credentials (playlists privadas habilitadas)"
fi

# Audio directo desde Spotify (requiere cuenta Premium)
if [[ "$USE_PREMIUM_AUDIO" == "true" && -n "$PREMIUM_USERNAME" ]]; then
    SPOTDL_ARGS+=(--audio spotify)
    ok "Modo Premium: audio directo desde Spotify"
    warn "Necesitarás autenticarte si es la primera vez"
else
    ok "Modo estándar: audio vía YouTube con metadata Spotify"
fi

# ── Download ─────────────────────────────────────────────────────────────
echo ""
echo "=================================================="
echo "  Descargando desde Spotify"
echo "  URL: $SPOTIFY_URL"
echo "  Destino: $SONGS_DIR/"
echo "=================================================="
echo ""

spotdl "${SPOTDL_ARGS[@]}"

# ── Post-procesado ───────────────────────────────────────────────────────
echo ""
ok "Descarga completada. Generando letras sincronizadas..."
bash "$SCRIPT_DIR/download-lyrics.sh"

echo ""
ok "Reconstruyendo playlist..."
bash "$SCRIPT_DIR/build-playlist.sh"

echo ""
echo "=================================================="
ok "Listo. Recargá https://player.zensitpro.pro/player/"
echo "=================================================="
