#!/bin/sh
# shellcheck disable=SC2086
set +x

cmd="tw-pip-check"

show_help() {
  cat << EOF
Usage: $cmd [OPTIONS]

Tool to check for missing shared library dependencies.

Options:
  -h, --help                    Show this help message and exit
  --python=PATH, --python PATH  Python interpreter to use
  --venv=PATH, --venv PATH      Virtual environment to use

Examples:
  $cmd
  $cmd --python=python3.13
  $cmd --venv=/opt/chainguard/foo
EOF
  exit 0
}

py=""
venv=""

while [ $# -ne 0 ]; do
    case "$1" in
        -h|--help) show_help;;
        --python=*) py="${1#*=}";;
        --python) py="$2"
            shift;;
        --venv=*) venv="${1#*=}";;
        --venv) venv="$2"
            shift;;
        --*) error "Unknown argument '$1'";;
    esac
    shift
done

set +x

if [ -n "$venv" ] && [ -n "$py" ]; then
    echo "ERROR: --venv and --python are mutually exclusive"
    exit 1
fi

if [ -n "$venv" ]; then
    if ! . "$venv/bin/activate"; then
        echo "ERROR: Not a valid virtual environment: $venv"
        exit 1
    fi
    py="$venv/bin/python3"
fi

if [ -z "$py" ]; then
    glob="/usr/bin/python3.[0-9][0-9] /usr/bin/python3.[789]"
    n=0
    for p in $glob; do
      [ -x "$p" ] && n=$((n+1)) && py=$p
    done
    if [ "$n" -ne 1 ]; then
      echo "ERROR: must pass --python: " \
           "found $n executables matching $glob"
      [ "$n" -eq 0 ] || echo "found:" $glob
      exit 1
    fi
fi

pipzip=/usr/share/pip-zipapp/pip-zipapp.pyz
[ -e "$pipzip" ] ||
    { echo "missing pip-zip - $pipzip does not exist"; exit 1; }
[ -f "$pipzip" ] ||
    { echo "missing pip-zip - $pipzip is not a file"; exit 1; }

info() { echo "$@"; }
vr() { info "execute:" "$@"; "$@"; }

pyver=$("$py" -c 'import sys; print("%s.%s" % (sys.version_info.major, sys.version_info.minor))')
info "running 'pip check' with $py at version '$pyver'"
vr "$py" "$pipzip" check
