#!/bin/bash

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"

cd "$SCRIPT_DIR" || exit 1

set -e

if ! command -v docker &>/dev/null; then
    echo "Docker Not Found"
    exit 1
fi

trap 'echo "Error Occured at \"$BASH_COMMAND\" with exit code $?"; exit 1' ERR

LITE=false
CUDA_VERSION=12.6
WORKFLOW=true

print_help() {
    echo "Usage: bash docker_build.sh [OPTIONS]"
    echo ""
    echo "Options:"
    echo "  --cuda 12.6|12.8    Specify the CUDA VERSION (REQUIRED)"
    echo "  --lite              Build a Lite Image"
    echo "  -h, --help          Show this help message and exit"
    echo ""
    echo "Examples:"
    echo "  bash docker_build.sh --cuda 12.6 --funasr --faster-whisper"
}

# Show help if no arguments provided
if [[ $# -eq 0 ]]; then
    print_help
    exit 0
fi

# Parse arguments
while [[ $# -gt 0 ]]; do
    case "$1" in
    --cuda)
        case "$2" in
        12.6)
            CUDA_VERSION=12.6
            ;;
        12.8)
            CUDA_VERSION=12.8
            ;;
        *)
            echo "Error: Invalid CUDA_VERSION: $2"
            echo "Choose From: [12.6, 12.8]"
            exit 1
            ;;
        esac
        shift 2
        ;;
    --lite)
        LITE=true
        shift
        ;;
    *)
        echo "Unknown Argument: $1"
        echo "Use -h or --help to see available options."
        exit 1
        ;;
    esac
done

TARGETPLATFORM=$(uname -m | grep -q 'x86' && echo "linux/amd64" || echo "linux/arm64")

if [ $LITE = true ]; then
    TORCH_BASE="lite"
else
    TORCH_BASE="full"
fi

docker build \
    --build-arg CUDA_VERSION=$CUDA_VERSION \
    --build-arg LITE=$LITE \
    --build-arg TARGETPLATFORM="$TARGETPLATFORM" \
    --build-arg TORCH_BASE=$TORCH_BASE \
    --build-arg WORKFLOW=$WORKFLOW \
    -t "${USER}/gpt-sovits:local" \
    .
