#!/usr/bin/env bash
#
# Summary: Activate virtual environment
#
# Usage: pyenv activate <virtualenv>
#        pyenv activate --unset
#
# Activate a Python virtualenv environment in current shell.
# This acts almost as same as `pyenv shell`, but this invokes the `activate`
# script in your shell.
#
# <virtualenv> should be a string matching a Python version known to pyenv.

set -e
[ -n "$PYENV_DEBUG" ] && set -x

# Provide pyenv completions
if [ "$1" = "--complete" ]; then
  echo --unset
  exec pyenv-virtualenvs --bare
fi

if [ "$1" = "--unset" ]; then
  echo "pyenv deactivate"
  exit
fi

versions=("$@")
if [ -z "$versions" ]; then
  no_shell=1
  OLDIFS="$IFS"
  IFS=: versions=($(pyenv-version-name))
  IFS="$OLDIFS"
fi

if [ -z "${PYENV_VIRTUALENV_INIT}" ]; then
  # Backward compatibility issue
  # https://github.com/yyuu/pyenv-virtualenv/issues/26
  no_shell=
fi

if [ "${#versions[@]}" -gt 1 ]; then
  echo "pyenv-virtualenv: cannot activate multiple versions at once: ${versions[@]}" 1>&2
  exit 1
fi

pyenv-virtualenv-prefix "${versions}" 1>/dev/null

shell="$(basename "${PYENV_SHELL:-$SHELL}")"
case "$shell" in
bash )
  profile="$HOME/.bash_profile"
  ;;
zsh )
  profile="$HOME/.zshrc"
  ;;
ksh )
  profile="$HOME/.profile"
  ;;
fish )
  profile="$HOME/.config/fish/config.fish"
  ;;
* )
  profile="$HOME/.profile"
  ;;
esac

# Display setup instruction if 'pyenv virtualenv-init -' is not found in "$profile"
if [ -f "$profile" ] && grep -q 'pyenv init -' "$profile" && ! grep -q 'pyenv virtualenv-init -' "$profile"; then
  pyenv-virtualenv-init >&2 || true
fi

if [ -z "$no_shell" ]; then
  echo "pyenv shell \"${versions}\";"
fi

case "$shell" in
fish )
  cat <<EOS
set -e PYENV_DEACTIVATE;
setenv PYENV_ACTIVATE "$(pyenv-prefix "${versions}")";
. "\${PYENV_ACTIVATE}/bin/activate.fish";
EOS
 ;;
*    )
  cat <<EOS
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="$(pyenv-prefix "${versions}")";
source "\${PYENV_ACTIVATE}/bin/activate";
EOS
  ;;
esac
