#!/usr/bin/env bash

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...] getpy3 [--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 $PYTHON3 ]]; then
		[[ -z $PYTHON && "$PYTHON_VER" == "3"  ]] && ln -s $PYTHON /usr/local/bin/python
	fi
}

check_variants() {
	PYTHON=$(command -v python)
	PYTHON3=$(command -v python3)

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

install_on_trusty() {
	runn apt-get install -y software-properties-common
	runn add-apt-repository -y ppa:deadsnakes/ppa
	runn apt-get -qq update
	runn apt-get install -y python3.6
	runn ln -sf `which python3.6` /usr/local/bin/python3
	runn apt-get install -y python3.6-venv
}

install_python() {
	if [[ ! -z $(command -v apt-get) ]]; then
		runn apt-get -qq update
		osver=$(source /etc/os-release; echo ${ID}${VERSION_ID})
		if [[ $osver == ubuntu14.04 ]]; then
			install_on_trusty
		else
			runn apt-get -qq install -y python3
		fi
	elif [[ ! -z $(command -v dnf) ]]; then
		runn dnf install -y python3
	elif [[ ! -z $(command -v yum) ]]; then
		runn yum install -y epel-release
		runn yum install -y python36
	elif [[ ! -z $(command -v apk) ]]; then
		runn apk update
		runn apk add python3
	elif [[ ! -z $(command -v brew) ]]; then
		runn brew install python3
	elif [[ ! -z $(command -v pkg) ]]; then
		runn pkg install -y python3
	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
		if [[ ! -z $(apt-cache search --names-only '^python3-distutils$')  ]]; then
			runn apt-get -qq install -y python3-distutils
		fi
	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 && $FORCE != 1 ]] && exit 0
[[ $CHECK == 1 ]] && exit 1

[[ -z $MYPY || $FORCE == 1 ]] && install_python

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

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

exit 0
