#!/usr/bin/env bash

# Check that Python 2 is installed (by checking for python, python2, and python2.7 commands).
# If so, verify that python2 and python2.7 commands are present.
# If Python 2 is not found on the system, try to install it and repeat the abose checks.

HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"

. $HERE/../shibumi/functions

if [[ $1 == --help || $1 == help || $HELP == 1 ]]; then
	cat <<-END
		[ARGVARS...] getpy2 [--help|help]

		Argument variables:
		CHECK=1     Only check and report, do not install
		PIP=1       Also install latest pip
		FORCE=1     Install even if present
		FIX=1       Create a /usr/local/bin/python symlink
		VERBOSE=1   Print commands
		HELP=1      Print help

	END
	exit 0
fi

[[ $VERBOSE == 1 ]] && { set -x; PS4='$LINENO: '; }

fix_variants() {
	if [[ ! -z $PYTHON2 ]]; then
		[[ -z $PYTHON && "$PYTHON_VER" == "2"  ]] && ln -s $PYTHON2 /usr/local/bin/python
	fi

	if [[ ! -z $PYTHON27 ]]; then
		[[ -z $PYTHON2 ]] && ln -s $PYTHON27 /usr/local/bin/python2
		[[ -z $PYTHON && "$PYTHON_VER" == "2" ]]  && ln -s $PYTHON27 /usr/local/bin/python
	fi
}

check_variants() {
	PYTHON=$(command -v python)
	PYTHON2=$(command -v python2)
	PYTHON27=$(command -v python2.7)

	MYPY=""
	PYTHON_VER=""
	
	if [[ ! -z $PYTHON ]]; then
		PYTHON_VER="$(python --version 2>&1 | cut -d" " -f2 | cut -d. -f1)"
		[[ $PYTHON_VER == 2 ]] && MYPY=$PYTHON
	fi
	
	[[ ! -z $PYTHON2 ]]  && MYPY=$PYTHON2
	[[ ! -z $PYTHON27 ]] && MYPY=$PYTHON27
	
	[[ ! -z $FIX ]] && fix_variants
}

install_python() {
	if [[ ! -z $(command -v apt-get) ]]; then
		runn apt-get -qq update
		runn apt-get -qq install -y python
	elif [[ ! -z $(command -v dnf) ]]; then
		runn dnf install -y python2
	elif [[ ! -z $(command -v yum) ]]; then
		runn yum install -y python2
	elif [[ ! -z $(command -v apk) ]]; then
		runn apk update
		runn apk add python2
	elif [[ ! -z $(command -v brew) ]]; then
		runn brew install python2
	elif [[ ! -z $(command -v pkg) ]]; then
		runn pkg install -y python2
	fi
}

install_pip() {
	if [[ $FORCE != 1 ]]; then
		[[ $($MYPY -m pip --version > /dev/null 2>&1; echo $?) == 0 ]] && return
	fi

	local packs="ca-certificates wget"

	if [[ ! -z $(command -v apt-get) ]]; then
		runn apt-get -qq update
		runn apt-get -qq install -y $packs
	elif [[ ! -z $(command -v dnf) ]]; then
		runn dnf install -y $packs
	elif [[ ! -z $(command -v yum) ]]; then
		runn yum install -y $packs
	elif [[ ! -z $(command -v apk) ]]; then
		runn apk update
		runn apk add $packs
	elif [[ ! -z $(command -v brew) ]]; then
		runn brew install wget
	elif [[ ! -z $(command -v pkg) ]]; then
		runn pkg install -y $packs
	fi

	runn wget -q -O /tmp/get-pip.py https://bootstrap.pypa.io/get-pip.py
	runn $MYPY /tmp/get-pip.py
	rm -f /tmp/get-pip.py
}

check_variants

[[ ! -z $MYPY && $PIP != 1 ]] && exit 0
[[ $CHECK == 1 ]] && exit 1

[[ -z $MYPY ]] && install_python

check_variants
if [[ -z $(command -v $MYPY) ]]; then
	>&2 echo "Cannot install Python2. Aborting."
	exit 1
fi

[[ $PIP == 1 ]] && install_pip

exit 0
