#!/bin/bash

prerequisites(){
	failed=0
	missing="(not found)"
	[[ $1 ]] && output=": &&" || output="printf";
	$output "$w_l  CHECK for binaries\n  ==================\n";

# check for a forgotten and unusable 'upx' and remove this crap
	[ -x "$bindir"/upx ] && "$bindir"/upx -V &>/dev/null || rm -f "$bindir"/upx &>/dev/null;

	for e in "${binvars[@]}"
	do
		if hash "$e" 2>/dev/null
		then
			einfo=$(which "$e")
			printf -v pad %40s
			e=$e$pad
			e=${e:0:15}
			$output "$w_l  have\t$g_l$e $y_l$einfo\n"
		else
			failed=1
			printf -v pad %40s
			e=$e$pad
			e=${e:0:15}
			$output "$r_l  need\t$w_l$e $r_l$missing\n"
		fi
	done

	if hash upx 2>/dev/null; then
		upxversion=($(upx -V | awk 'NR==1 { verok=$2>=3.91; printf "%.2f %i", $2, verok }'));
		$output "$w_l  have$g_l  upx$y_l\t\t"$w_l"Version$P ${upxversion[0]}";
		if [ ${upxversion[1]} == 1 ]
		then
			$output "$g_l ok\n"
		else
			$output "$r_l nok\n"
			failed=1
		fi
	fi

	$output " \n $w_l CHECK for headers\n  =================\n"

	for e in "${headervars[@]}"
	do
		e1=$(find /usr/include/* | grep -m1 "$e")
		if [ ${#e1} -gt 8 ]
		  then
			printf -v pad %40s
			e=$e$pad
			e=${e:0:15}
			$output "$w_l  have\t$g_l$e$y_l $e1\n"
		else
			failed=1
			printf -v pad %40s
			e=$e$pad
			e=${e:0:15}
			$output "$r_l  need\t$w_l$e$r_l $missing\n"
		fi
	done

$output " \n $w_l CHECK for libraries\n  ===================\n"

for e in "${libvars[@]}"
do
	e1=$(find /usr/lib* 2>/dev/null | grep -m1 "$e")
	if [ ${#e1} -gt 8 ]
	then
		printf -v pad %40s
		e=$e$pad
		e=${e:0:15}
		$output "$w_l  have\t$g_l$e$y_l $e1\n"
	else
		failed=1
		printf -v pad %40s
		e=$e$pad
		e=${e:0:15}
		$output "$r_l  need\t$w_l$e$r_l $missing\n";
	fi
done

if [ "$(uname -m)" == "x86_64" ]
	then
	$output " \n $w_l CHECK for zlib32\n  ================\n"
	e="zlib32"
	e1="/usr/lib/libz.so"
	e2="/usr/lib32/libz.so.1"
	if [ -f $e1 ]
	then
		printf -v pad %40s
		e=$e$pad
		e=${e:0:15}
		$output "$w_l  have\t$g_l$e$y_l $e1\n"
	elif [ -f $e2 ]
		then
		printf -v pad %40s
		e=$e$pad
		e=${e:0:15}
		$output "$w_l  have\t$g_l$e$y_l $e2\n"
	else
		failed=1
		printf -v pad %40s
		e=$e$pad
		e=${e:0:15}
		$output "$r_l  need\t$w_l$e$r_l $missing\n"
	fi
fi

return $failed
}

# Parameters (all optional):
#   $1: installer name (or "auto")
#   $2: add architecture (not implemented yet)
#
# Example:
#   syscheck debian_os
#     call installer 'debian_os' (Do not care about the actual Linux distribution.)

syscheck(){
[[ $1 ]] && [ "$1" != "auto" ] && override="$1"
now=$2
if [ -d "$osdir" ]
then
	cd "$osdir"
	x=(*)
	for i in "${x[@]}"
	do
		source "$i"
	done
fi

unset binvars; unset headervars; unset libvars;
[ -z ${3+x} ] && binvars=( dialog grep gawk wget tar bzip2 svn xz upx patch gcc make scp sshpass openssl dos2unix ) || binvars=( $(echo "$3" | tr ' ' '\n') )
[ -z ${4+x} ] && headervars=( crypto.h libusb.h pcsclite.h pthread.h ) || headervars=( $(echo "$4" | tr ' ' '\n') )
[ -z ${5+x} ] && libvars=( libccidtwin.so ) || libvars=( $(echo "$5" | tr ' ' '\n') )
sanity=1

if ! prerequisites silent || [ "$now" == "now" ]
then
	clear
	s3logo
	prerequisites
	sanity=0
	installer="unknown"

	# Debian and Ubuntu
	[ -f /etc/debian_version ] && installer="debian_os"

	# CentOS and Redhat
	[ -f /etc/redhat-release ] && installer="redhat_os"

	# Manjaro (/etc/os-release)
	[ -f /etc/manjaro-release ] || [ -f /etc/arch-release ] && installer="manjaro_os"

	# SuSE (/etc/SuSE-release is depreciated -> check for YaST2)
	[ -d /etc/YaST2 ] && installer="suse_os"

	# Optional override via parameter
	#[[ $override ]] && installer=$override;
	printf "\n$w_l  Selected installer:    $P$installer\n"

	if type -t "$installer" >/dev/null
	then
		$installer && prerequisites silent && sanity=1
	else
		printf "\n$r_l  Needs manual installation.\n"
	fi

	printf "$re_\n"
fi

return $sanity
}