#!/usr/bin/env bash
# ==============================================================================
# whisperize.sh — Script autónomo para preparar audio para Whisper
#
# Convierte CUALQUIER archivo de audio al formato que Whisper espera:
#   - Frecuencia de muestreo: 16.000 Hz (16 kHz)
#   - Canales: Mono (1)
#   - Formato: PCM signed 16-bit little-endian (pcm_s16le)
#   - Normalizado con loudnorm (EBU R128, -23 LUFS)
#
# Uso:
#   ./whisperize.sh grabacion.mp3          → grabacion_whisper.wav
#   ./whisperize.sh grabacion.mp3 salida   → salida.wav
#
# atareao con Linux — Episodio 842
# ==============================================================================
set -euo pipefail

# ── Colores (si terminal lo soporta) ──────────────────────────────────────
if [ -t 1 ]; then
    VERDE='\033[0;32m'
    AMARILLO='\033[1;33m'
    CYAN='\033[0;36m'
    NC='\033[0m' # Sin color
else
    VERDE=''; AMARILLO=''; CYAN=''; NC=''
fi

# ── Ayuda ─────────────────────────────────────────────────────────────────
usage() {
    echo "Uso: $0 <entrada> [salida]"
    echo ""
    echo "Prepara un archivo de audio para su transcripción con Whisper."
    echo ""
    echo "Argumentos:"
    echo "  entrada   Ruta al archivo de audio original (cualquier formato)"
    echo "  salida    Ruta del archivo WAV resultante (opcional)"
    echo ""
    echo "Si no se especifica salida, se genera: <entrada_sin_ext>_whisper.wav"
    echo ""
    echo "Ejemplos:"
    echo "  $0 grabacion.mp3"
    echo "  $0 audio.ogg michelada_whisper.wav"
    exit 0
}

# ── Parsear argumentos ────────────────────────────────────────────────────
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    usage
fi

ENTRADA="$1"
SALIDA="${2:-${ENTRADA%.*}_whisper.wav}"

# ── Validar entrada ───────────────────────────────────────────────────────
if [ ! -f "$ENTRADA" ]; then
    echo -e "${AMARILLO}❌ Error: No se encuentra el archivo '${ENTRADA}'${NC}" >&2
    exit 1
fi

if ! command -v ffmpeg &>/dev/null; then
    echo -e "${AMARILLO}❌ Error: ffmpeg no está instalado.${NC}" >&2
    echo "   Instálalo con: sudo apt install ffmpeg" >&2
    exit 1
fi

# ── Mostrar info del archivo original ─────────────────────────────────────
echo -e "${CYAN}🎤 whisperize — Preparando audio para Whisper${NC}"
echo ""
ORIG_SIZE=$(stat -c%s "$ENTRADA" 2>/dev/null || echo "?")
echo -e "   ${VERDE}Entrada:${NC}  $ENTRADA ($([ -f "$ENTRADA" ] && echo "$(du -h "$ENTRADA" | cut -f1)" || echo "?"))"
echo -e "   ${VERDE}Salida:${NC}   $SALIDA"
echo ""

# Mostrar info del audio original (si ffprobe está disponible)
if command -v ffprobe &>/dev/null; then
    echo "   Información del original:"
    ffprobe -v quiet -show_entries \
        stream=codec_name,sample_rate,channels:format=format_name,duration \
        -of default=noprint_wrappers=1 "$ENTRADA" 2>/dev/null \
        | sed 's/^/     /'
    echo ""
fi

# ── Convertir ─────────────────────────────────────────────────────────────
echo -e "   ${VERDE}Procesando...${NC}"

ffmpeg -y \
    -i "$ENTRADA" \
    -ar 16000 \
    -ac 1 \
    -c:a pcm_s16le \
    -af loudnorm \
    "$SALIDA" 2>&1 \
    | grep -E "(size=|bitrate=|Output)" \
    | sed 's/^/     /'

echo ""
echo -e "   ${VERDE}✅ Listo:${NC} $SALIDA ($(du -h "$SALIDA" | cut -f1))"
echo ""
echo -e "   ${CYAN}📋 Resumen:${NC}"
echo "      Frecuencia: 16 kHz    Canales: Mono    Formato: PCM s16le"
echo "      Volumen: Normalizado (loudnorm, -23 LUFS)"
echo "      Listo para: whisper transcribe"