# Piper Voice Downloader Script
# Usage: ./scripts/download_voice.sh [voice_name]
# Example: ./scripts/download_voice.sh en_US-hfc_female-medium

VOICE=$1

if [ -z "$VOICE" ]; then
    echo "❌ Usage: $0 [voice_name]"
    echo "💡 Example: $0 en_US-hfc_female-medium"
    exit 1
fi

# Resolve project root (parent of 'scripts' directory)
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
PROJECT_ROOT="$( dirname "$SCRIPT_DIR" )"
MODELS_DIR="$PROJECT_ROOT/assets/models"

mkdir -p "$MODELS_DIR"

echo "🔍 Parsing voice: $VOICE"

# Extraction logic for Piper HuggingFace structure
# Format: [lang_code]-[speaker]-[quality]
# Example: en_US-hfc_female-medium
LANG_CODE=$(echo $VOICE | cut -d'-' -f1)
LANG=$(echo $LANG_CODE | cut -d'_' -f1)
SPEAKER=$(echo $VOICE | cut -d'-' -f2)
QUALITY=$(echo $VOICE | cut -d'-' -f3)

if [ -z "$QUALITY" ]; then
    echo "⚠️ Quality not detected in name, defaulting to 'medium' for URL lookup..."
    QUALITY="medium"
fi

HF_BASE_URL="https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0"
ONNX_URL="$HF_BASE_URL/$LANG/$LANG_CODE/$SPEAKER/$QUALITY/$VOICE.onnx?download=true"
JSON_URL="$HF_BASE_URL/$LANG/$LANG_CODE/$SPEAKER/$QUALITY/$VOICE.onnx.json?download=true"

echo "🎙️ Downloading to: $MODELS_DIR"

# Try wget, then curl
download_file() {
    local url=$1
    local out=$2
    if command -v wget &> /dev/null; then
        wget -q --show-progress -O "$out" "$url"
    elif command -v curl &> /dev/null; then
        curl -L -o "$out" "$url"
    else
        echo "❌ Error: Neither wget nor curl found. Please install one."
        exit 1
    fi
}

echo "⬇️ Downloading ONNX model..."
download_file "$ONNX_URL" "$MODELS_DIR/$VOICE.onnx"

echo "⬇️ Downloading Config JSON..."
download_file "$JSON_URL" "$MODELS_DIR/$VOICE.onnx.json"

if [ -f "$MODELS_DIR/$VOICE.onnx" ] && [ -s "$MODELS_DIR/$VOICE.onnx" ]; then
    echo "✅ Success! Model saved as $MODELS_DIR/$VOICE.onnx"
else
    echo "❌ Failed to download. Please check the voice name or your internet connection."
    exit 1
fi
