#!/usr/bin/env bash
# validate-sync.sh
# Compara duración de MP3 vs último timestamp del LRC.
# Si difieren >15s → probable mismatch de versión.
set -euo pipefail

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

ok=0; warn=0; nolyrics=0

while IFS= read -r mp3; do
  base="$(basename "$mp3")"
  stem="${base%.*}"
  lrc="$LYRICS_DIR/$stem.lrc"

  if [[ ! -f "$lrc" ]]; then
    echo "[--] $stem  (sin LRC)"
    nolyrics=$((nolyrics+1)); continue
  fi

  # Duración real del MP3 via ffprobe
  dur=$(ffprobe -v error -show_entries format=duration \
        -of default=noprint_wrappers=1:nokey=1 "$mp3" 2>/dev/null | cut -d. -f1)

  # Último timestamp LRC: formato [MM:SS.xx]
  last_ts=$(grep -oP '^\[\d+:\d+\.\d+\]' "$lrc" 2>/dev/null | tail -1 || true)
  if [[ -z "$last_ts" ]]; then
    echo "[??] $stem  (LRC sin timestamps válidos)"
    warn=$((warn+1)); continue
  fi

  # Convertir [MM:SS.xx] a segundos (10# fuerza base decimal, evita octal con 08/09)
  mins=$(echo "$last_ts" | grep -oP '\d+(?=:)' || echo "0")
  secs=$(echo "$last_ts" | grep -oP '(?<=:)\d+(?=\.)' || echo "0")
  lrc_end=$(( 10#$mins * 60 + 10#$secs ))

  diff=$(( dur - lrc_end ))
  abs_diff=${diff#-}  # valor absoluto

  if (( abs_diff > 15 )); then
    echo "[WARN] $stem"
    echo "       MP3 duración: ${dur}s  |  LRC último ts: ${lrc_end}s  |  diff: ${diff}s"
    warn=$((warn+1))
  else
    echo "[OK ] $stem  (MP3 ${dur}s / LRC ${lrc_end}s)"
    ok=$((ok+1))
  fi
done < <(find "$SONGS_DIR" -maxdepth 1 -name "*.mp3" | sort)

echo ""
echo "================================"
echo "OK: $ok  |  WARN: $warn  |  SIN LRC: $nolyrics"
echo "================================"
