# Handy script for activating the local venv
# Can be sourced manually from a bash shell, or used with direnv ( https://direnv.net/ )

echo "Configuring shell for molflux:"

if [ -n "$ZSH_VERSION" ]; then
   _SOURCE_SHELL=zsh
   _SCRIPT_DIR="$( cd "$( dirname "${(%):-%N}" )" &> /dev/null && pwd )"
elif [ -n "$BASH_VERSION" ]; then
   _SOURCE_SHELL=bash
   _SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
else
   echo "Unsupported shell"
   exit 1
fi


_VENV_DIR=${_SCRIPT_DIR}/.venv
echo "Detected $_SOURCE_SHELL"
echo "_VENV_DIR=$_VENV_DIR"

if [ -z "$CI" ]; then
    :  # no-op
else
    echo "[!] Running in a CI pipeline - no virtual environment needed."
    return
fi

if [ -d "${_VENV_DIR}" ]; then
    echo "[+] Found virtual environment: ${_VENV_DIR}"
else
    echo "[!] Virtual environment not found: ${_VENV_DIR}"
    echo "[?] Have you tried running a init_{python,conda}_venv.sh script first?"
    return
fi


if [ -z "$CONDA_DEFAULT_ENV" ]; then
    echo "[+] Detected base python distribution"
    _PYTHON=1
else
    echo "[+] Detected base anaconda python distribution"
    export PIP_REQUIRE_VIRTUALENV=false
    _CONDA=1
fi

if [ "$_PYTHON" ]; then

    if [[ "$OSTYPE" == "linux-gnu" || "$OSTYPE" == "darwin"*  ]]; then
        _ACTIVATE="${_VENV_DIR}/bin/activate"
    elif [[ "$OSTYPE" == "msys" ]]; then
        _ACTIVATE="${_VENV_DIR}/Scripts/activate"
    fi

    if [ -f "${_ACTIVATE}" ]; then
        echo "[+] Activating virtual environment..."
        source "${_ACTIVATE}"
    else
        echo "[!] Could not find virtual environment activation script: ${_ACTIVATE}"
    fi

fi


if [ "$_CONDA" ]; then
    echo "[+] Activating virtual environment..."
    # https://github.com/conda/conda/issues/7980
    _CONDA_PATH=$(conda info | grep -i 'base environment' | awk '{print $4}')
    source "${_CONDA_PATH}/etc/profile.d/conda.sh"
    conda activate "${_VENV_DIR}"
fi

# Activate nox autocompletion
echo "[+] Activating shell autocompletions..."
if [[ "$_SOURCE_SHELL" == "zsh" ]]; then
    eval "$(pip completion --zsh)"
else
    eval "$(pip completion --bash)"
    eval "$(register-python-argcomplete nox)"
fi

echo "Default Python is now $(which python)"


unset _SCRIPT_DIR
unset _VENV_DIR
unset _PYTHON
unset _CONDA
unset _CONDA_PATH
unset _ACTIVATE
unset _SOURCE_SHELL
