#!/usr/bin/env bash

# This script sets up a Python virtualenv for the Mesos CLI.
# This creates a new virtualenv, installs the necessary Python
# dependencies inside the virtualenv, and enables bash auto
# completion for the Mesos CLI.

set -e
trap "exit 1" INT

CURRDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

: ${VIRTUALENV_NAME:="mesos-cli"}
: ${VIRTUALENV_DIRECTORY:="${CURRDIR}/.virtualenv"}

: ${PYTHON:="$(which python)"}
: ${VIRTUALENV:="$(which virtualenv)"}

OLD_PYTHONPATH="${PYTHONPATH}"
PYTHONPATH=""

# If we already have a virtual environment activated,
# bail out and advise the user to deactivate.
OLD_VIRTUAL_ENV="${VIRTUAL_ENV}"
if [ "${OLD_VIRTUAL_ENV}" != "" ]; then
  echo "Please deactivate your current virtual environment in order to continue!"
  echo "source deactivate"
  exit 1
fi

# Verify that python and virtualenv are installed.
if [ "${PYTHON}" = "" ]; then
  echo "You must have python installed in order to continue."
  exit 1
fi

PYTHON_MAJOR=$(${PYTHON} -c 'import sys; print(sys.version_info[0])')
PYTHON_MINOR=$(${PYTHON} -c 'import sys; print(sys.version_info[1])')

if [ "${PYTHON_MAJOR}" != "3" ] || [ "${PYTHON_MINOR}" -lt "6" ]; then
  echo "You must be running python 3.6 or newer in order to continue."
  echo "Consider running as 'PYTHON=python3 ./bootstrap' or similar."
  exit 1
fi

# Set up a virtual environment for the CLI.
${PYTHON} -m venv --clear --prompt="${VIRTUALENV_NAME}" ${VIRTUALENV_DIRECTORY}

source ${VIRTUALENV_DIRECTORY}/bin/activate
SITE_PACKAGES=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo ${SITE_PACKAGES}
echo "${CURRDIR}/lib" > ${SITE_PACKAGES}/_virtualenv_path_extensions.pth
echo "${CURRDIR}/../lib" >> ${SITE_PACKAGES}/_virtualenv_path_extensions.pth
python -m pip install --upgrade pip
python -m pip install -r ${CURRDIR}/pip-requirements.txt
python -m pip install -r ${CURRDIR}/../lib/requirements.in
deactivate

# Add custom postactivate / predeactivate scripts to add / remove
# the bin directory of this project to the current path in the
# virtual environment (as well as setup bash auto completion).
cat > ${VIRTUALENV_DIRECTORY}/bin/postactivate << EOF
#!/usr/bin/env bash
PROJECT_BIN="${CURRDIR}/bin"
PATH="\${PROJECT_BIN}:\${PATH}"
PYTHONPATH=""

EOF
cat ${CURRDIR}/mesos.bash_completion >> ${VIRTUALENV_DIRECTORY}/bin/postactivate

cat > ${VIRTUALENV_DIRECTORY}/bin/predeactivate << EOF
#!/usr/bin/env bash
PROJECT_BIN="${CURDRDIR}/bin"
PATH=\${PATH/":\${PROJECT_BIN}"/}
PATH=\${PATH/"\${PROJECT_BIN}:"/}
PYTHONPATH="${OLD_PYTHONPATH}"

complete -r mesos
EOF

echo ""
echo "Setup complete!"
echo ""
echo "To begin working, simply activate your virtual"
echo "environment and deactivate it when you are done."
echo ""

if [ "${VIRTUALENV_DIRECTORY}" = "${CURRDIR}/.virtualenv" ]; then
  # Print some info about the sucess of the installation.
  echo "    $ source activate"
  echo "    $ mesos <command> [<args>...]"
  echo "    $ source deactivate"
  echo ""
else
  echo "    $ source ${VIRTUALENV_DIRECTORY}/bin/activate"
  echo "    $ source ${VIRTUALENV_DIRECTORY}/bin/postactivate"
  echo "    $ mesos <command> [<args>...]"
  echo "    $ source ${VIRTUALENV_DIRECTORY}/bin/predeactivate"
  echo "    $ deactivate"
  echo ""
  echo "The postactivate and predeactivate files set up autocompletion."
  echo "Add the mesos binary parent directory"
  echo "${CURRDIR}/bin/"
  echo "to your path, export it, and source"
  echo "${CURRDIR}/mesos.bash_completion"
  echo "to skip these two steps in the future."
  echo ""
fi
