#!/bin/bash -x
# Utilities to interact with android more easily

function run_quiet() { eval "$* >/dev/null 2>&1"; }

make_csv() {
	out=""
	in=$1
	for p in $in; do
		if [ "x$out" == "x" ]; then
			out=$p
		else
			out="$out,$p"
		fi
	done
	echo $out
}

make_spaces() {
	out=""
	in=$1
	for p in $in; do
		if [ "x$out" == "x" ]; then
			out=$p
		else
			out="$out $p"
		fi
	done
	echo $out
}

cmd_exists() {
	which $1 > /dev/null
	return $?
}

do_adb_root() {
	ADB="$1"
	$ADB root > /dev/null 2>&1
	return $?
}

die() {
	exit_code=$1
	msg=$2
	c_error "$msg"
	exit $exit_code
}

die_if_no_androdeb() {
	set +e
	$ADB shell ls /data/androdeb/debian > /dev/null 2>&1
	if [ $? -ne 0 ]; then die 8 "Existing androdeb env not found on device. $1"; fi
	set -e
}

#  Helper function to count number of source arguments in a list
#  when more than one argument is supplied, it is assumed the last argument
#  is a destination
count_sources() {
	local source_count=$#
	if [ $source_count -gt 1 ]; then
		source_count=$((source_count - 1))
	fi
	echo "$source_count"
}

# Borrowed from project LISA.
################################################################################
# Logging functions
################################################################################
c_error() {
	NOW=$(date +"%H:%m:%S")
	# If there is only one parameter, let's assume it's just the message
	if [ $# -gt 1 ]; then
		local parent_lineno="$1"
		local message="$2"
		echo -e "${red}$NOW - ERROR: on or near line ${parent_lineno}: ${message}${nocol}"
		return
	fi

	local message="$1"
	echo -e "${red}$NOW - ERROR   : ${message}${nocol}"
}

c_warning() {
	NOW=$(date +"%H:%m:%S")
	# If there is only one parameter, let's assume it's just the message
	if [ $# -gt 1 ]; then
		local parent_lineno="$1"
		local message="$2"
		echo -e "${yellow}$NOW - WARNING: on or near line ${parent_lineno}: ${message}${nocol}"
		return
	fi
	local message="$1"
	echo -e "${yellow}$NOW - WARNING : ${message}${nocol}"
}

c_info() {
	NOW=$(date +"%H:%m:%S")
	# If there is only one parameter, let's assume it's just the message
	if [ $# -gt 1 ]; then
		local parent_lineno="$1"
		local message="$2"
		echo -e "${blue}$NOW - INFO: on or near line ${parent_lineno}: ${message}${nocol}"
		return
	fi
	local message="$1"
	echo -e "${blue}$NOW - INFO    : ${message}${nocol}"
}

d_notify() {
	MESSAGE=$1
	ICON=$2
	# Let's try to send a desktop notification,
	# silently fails if there is not support.
	notify-send \
		--icon=$ICON \
		--urgency=critical \
		--expire-time=1500 \
		"Test Series" \
		"$MESSAGE" \
		2>/dev/null
}

my_tput() {
	if [ "${TERM-dumb}" == dumb ]; then
		return
	fi
	tput $*
}

box_out()
{
	local s=("$@") b w
	for l in "${s[@]}"; do
		((w<${#l})) && { b="$l"; w="${#l}"; }
	done
	my_tput setaf 3
	echo -e "|-${b//?/-}-|"
	for l in "${s[@]}"; do
		printf '| %s%*s%s |\n' "$(my_tput setaf 4)" "-$w" "$l" "$(my_tput setaf 3)"
		# echo "|-${b//?/-}-|"
	done
	echo "|-${b//?/-}-|"
	my_tput sgr 0
}


################################################################################
# Colors
################################################################################

if [ -t 1 ]; then
	ncolors=$(my_tput colors)
	if [ -n "${ncolors}" ] && [ ${ncolors} -ge 8 ]; then
		nocol='\e[0m' # No Color
		white='\e[1;37m'
		black='\e[0;30m'
		blue='\e[0;34m'
		lblue='\e[1;34m'
		green='\e[0;32m'
		lgreen='\e[1;32m'
		cyan='\e[0;36m'
		lcyan='\e[1;36m'
		red='\e[0;31m'
		lred='\e[1;31m'
		purple='\e[0;35m'
		lpurple='\e[1;35m'
		brown='\e[0;33m'
		yellow='\e[1;33m'
		grey='\e[0;30m'
		lgrey='\e[0;37m'
	fi
fi