#!/usr/bin/sh

# Wrapper for CLI Python tools - main purpose is to select a good
# Python version to use, then execute the real tool

# Always set PEGASUS_HOME based on where the tool was run from
PEGASUS_HOME="`dirname "$0"`/.."
PEGASUS_HOME=`cd "$PEGASUS_HOME" && pwd`
export PEGASUS_HOME

# when running tools from /bin, / becomes a special case
if [ "$PEGASUS_HOME" = "/" ]; then
    PEGASUS_HOME=/usr
    export PEGASUS_HOME
fi

# The base name is used to decide what Python tool to invoke
BASE_NAME=pegasus-metadata

# only discover Python once, even if multiple Pegasus tools are called
if [ "x$PEGASUS_PYTHON" = "x" ]; then

    # PATH must be visible to which
    export PATH

    # first look in the PATH
    I=0
    eval PEXE_LIST$I="$(which python3 2>/dev/null)"
    I=$((I+1))
    # has to be last to find user defined environments
    eval PEXE_LIST$I="/usr/bin/python3"
    I=$((I+1))

    # Look for a python in the give list
    for i in `seq $I`; do
        VAR=\$PEXE_LIST$((i-1))
        PEXE=`eval echo $VAR`
        if [ -e "$PEXE" ]; then
            break
        fi
    done

    if [ "x$PEXE" = "x" ]; then
        echo "ERROR: Unable to find Python! Looked in: $PEXE_LIST. PATH=$PATH" >&2
        exit 1
    fi

    # Some quick validations - but exclude worker package tools
    PREFLIGHT=1
    for TOOL in \
        pegasus-config \
        pegasus-integrity \
        pegasus-preflight-check \
        pegasus-s3 \
        pegasus-transfer \
    ; do
        if [ "x$BASE_NAME" = "x$TOOL" ]; then
            PREFLIGHT=0
        fi
    done
    if [ "x$PREFLIGHT" = "x1" ]; then
        # this is just a warning for now
        "$PEXE" "$PEGASUS_HOME/lib64/pegasus/python/Pegasus/cli/pegasus-preflight-check.py" || true
    fi

    # remember the Python version to use when calling other Pegasus tools
    PEGASUS_PYTHON=$PEXE
    export PEGASUS_PYTHON
fi

# set up a PYTHONPATH so the tools do not have to worry about that, but remember the original one
if [ "x$PEGASUS_UPDATE_PYTHONPATH" != "x0" ]; then
    NEW_PYTHONPATH="$PEGASUS_HOME/lib64/pegasus/python:$PEGASUS_HOME/lib64/pegasus/externals/python"
    # only prepend if it not already there
    if ! $(echo "X$PYTHONPATH" | grep -q "^X$NEW_PYTHONPATH"); then
        PYTHONPATH="${NEW_PYTHONPATH}${PYTHONPATH:+:}${PYTHONPATH}"
        export PYTHONPATH
    fi
    # let the tools know we have a valid PYTHONPATH
    PEGASUS_PYTHONPATH_SET=1
    export PEGASUS_PYTHONPATH_SET
else
    # make sure we carry the setting forward
    export PEGASUS_UPDATE_PYTHONPATH
fi

# Build a full path to our real Python tool (we used to depend on pegasus-config
# here, but as that has a dependency on perl, we are shortcutting it)
TOOL_PATH="$PEGASUS_HOME/lib64/pegasus/python/Pegasus/cli/$BASE_NAME.py"

# now execute
exec "$PEGASUS_PYTHON" "$TOOL_PATH" "$@"

