#!/usr/bin/env bash
set -e
[ -n "$PYENV_DEBUG" ] && set -x

# Provide pyenv completions
if [ "$1" = "--complete" ]; then
  exec python-build --definitions
fi

if [ -z "$PYENV_ROOT" ]; then
  PYENV_ROOT="${HOME}/.pyenv"
fi

# Load shared library functions
eval "$(python-build --lib)"

usage() {
  { echo "usage: pyenv install [-k|--keep] [-v|--verbose] VERSION"
    echo "       pyenv install [-k|--keep] [-v|--verbose] /path/to/definition"
    echo "       pyenv install -l|--list"
    echo
    echo "  -l/--list        List all available versions"
    echo "  -k/--keep        Keep source tree in \$PYENV_BUILD_ROOT after installation"
    echo "                   (defaults to ${PYENV_ROOT}/sources)"
    echo "  -v/--verbose     Verbose mode: print compilation status to stdout"
    echo
  } >&2

  [ -z "$1" ] || exit "$1"
}

unset KEEP
unset VERBOSE

parse_options "$@"
for option in "${OPTIONS[@]}"; do
  case "$option" in
  "h" | "help" )
    usage 0
    ;;
  "l" | "list" )
    echo "Available versions:"
    python-build --definitions | sed 's/^/  /'
    exit
    ;;
  "k" | "keep" )
    [ -n "${PYENV_BUILD_ROOT}" ] || PYENV_BUILD_ROOT="${PYENV_ROOT}/sources"
    ;;
  "v" | "verbose" )
    VERBOSE="-v"
    ;;
  "version" )
    exec python-build --version
    ;;
  * )
    usage 1
    ;;
  esac
done

DEFINITION="${ARGUMENTS[0]}"
[ -n "$DEFINITION" ] || usage 1

for script in $(pyenv-hooks install); do
  source "$script"
done

VERSION_NAME="${DEFINITION##*/}"
PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"

# If PYENV_BUILD_ROOT is set, then always pass keep options to python-build
if [ -n "${PYENV_BUILD_ROOT}" ]; then
  export PYTHON_BUILD_BUILD_PATH="${PYENV_BUILD_ROOT}/${VERSION_NAME}"
  KEEP="-k"
fi

python-build $KEEP $VERBOSE "$DEFINITION" "$PREFIX"
pyenv rehash
