#!/usr/bin/env bash
#
# Summary: Display real_prefix for a Python virtualenv version
# Usage: pyenv virtualenv-prefix [<virtualenv>]
#

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

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

if [ -n "$1" ]; then
  versions=($@)
  IFS=: PYENV_VERSION="${versions[*]}"
  export PYENV_VERSION
else
  IFS=: versions=($(pyenv-version-name))
fi

real_prefix() { # virtualenv
  local version="$1"
  PYENV_VERSION="${version}" pyenv-exec python -c 'import sys;print(sys.real_prefix)' 2>/dev/null
}

base_prefix() { # pyvenv
  # FIXME: non-pyvenv versions also have sys.base_prefix
  local version="$1"
  PYENV_VERSION="${version}" pyenv-exec python -c 'import sys;print(sys.base_prefix)' 2>/dev/null
}

VIRTUALENV_PREFIX_PATHS=()
for version in "${versions[@]}"; do
  if [ "$version" = "system" ]; then
    echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2
    exit 1
  fi
  PREFIX="$(pyenv-prefix "${version}")"
  if [ -f "${PREFIX}/bin/activate" ]; then
    VIRTUALENV_PREFIX_PATH="$(real_prefix "${version}" || base_prefix "${version}" || true)"
    VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "$VIRTUALENV_PREFIX_PATH")
  else
    echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2
    exit 1
  fi
done

IFS=: echo "${VIRTUALENV_PREFIX_PATHS[*]}"
