#!/bin/bash

python_path=""
module_to_import=""
pip_package=""

function usage
{
    retval="$1"
    case "$retval" in
        0)
            ;;
        *)
            exec 1>&2
            ;;
    esac
    echo "Usage: $0"
    echo "    --python-path /where/python/lives/python"
    echo "    --module-to-import module_name"
    echo "    --pip-package pip-package-name"
    echo
    echo This program installs a package from pypi, but only if module_name
    echo is not yet importable.
    echo
    echo This cuts down on unnecessary sudoing.
    exit "$retval"
}

while [ "$#" -ge 2 ]
do
    case "$1" in
        --python-path)
            python_path="$2"
            shift
            ;;
        --module-to-import)
            module_to_import="$2"
            shift
            ;;
        --pip-package)
            pip_package="$2"
            shift
            ;;
        -h|--help)
            usage 0
            ;;
        *)
            echo "$0: Unrecognized option: $1" 1>&2
            usage 1
            ;;
    esac
    shift
done

case "$python_path" in
    "")
        echo --python-path is a required option 1>&2
        usage 1
        ;;
esac

case "$module_to_import" in
    "")
        echo --module-to-import is a required option 1>&2
        usage 1
        ;;
esac

case "$pip_package" in
    "")
        echo --pip-package is a required option 1>&2
        usage 1
        ;;
esac

if "$python_path" -c "import $module_to_import" > /dev/null 2>&1
then
    :
else
    "$python_path" -m pip install --break-system-packages "$pip_package" \
        || sudo "$python_path" -m pip install --break-system-packages "$pip_package" \
        || "$python_path" -m pip install "$pip_package" \
        || sudo "$python_path" -m pip install "$pip_package"
    
    sudo "$python_path" -m pip install --break-system-packages "$pip_package" || sudo "$python_path" -m pip install "$pip_package"
fi