#!/bin/bash
set -e

usage() {
cat << EOF
Usage: $0 [OPTIONS]
Build a new Python Docker image.

Options:
    -g, --gpu                 Build an image with GPU support.
    -c, --use-cache           Use layer cache when building a new image.
    -b, --base-image-tag TAG  Base image tag. Defaults to value defined in DOCKERFILE.
EOF
}

CACHE_FLAG='--no-cache'
DOCKERFILE='Dockerfile'
IMAGE_TAG='kaggle/python-build'
BUILD_ARGS=''

while :; do
    case "$1" in 
        -h|--help)
            usage
            exit
            ;;
        -g|--gpu)
            IMAGE_TAG='kaggle/python-gpu-build'
            DOCKERFILE='gpu.Dockerfile'
            ;;
        -c|--use-cache)
            CACHE_FLAG=''
            ;;
        -b|--base-image-tag)
            if [[ -z $2 ]]; then
                usage
                printf 'ERROR: No TAG specified after the %s flag.\n' "$1" >&2
                exit
            fi
            BUILD_ARGS="--build-arg BASE_TAG=$2"
            shift # skip the flag value
            ;;
        -?*)
            usage
            printf 'ERROR: Unknown option: %s\n' "$1" >&2
            exit
            ;;
        *)            
            break
    esac

    shift
done

readonly CACHE_FLAG
readonly DOCKERFILE
readonly IMAGE_TAG
readonly BUILD_ARGS

set -x
docker build --rm --pull $CACHE_FLAG -t "$IMAGE_TAG" -f "$DOCKERFILE" $BUILD_ARGS .
