#!/bin/bash

function installpkg()
{
	querycmd=$1
	installer=$2
	pkg=$3

	echo "Checking $pkg..."
	$querycmd $pkg > /dev/null 2>&1
	if [ $? -ne 0 ] ; then
		echo "$pkg isn't installed, trying to install it."
		$installer $pkg
		$querycmd $pkg > /dev/null 2>&1
		if [ $? -ne 0 ] ; then
			echo "Failed to install $pkg"
			exit 1
		fi
	fi
	echo "$pkg installed"
}

function checkpkgver()
{
	querycmd=$1
	pkg=$2
	ver=$3

	echo -n "Checking version of $pkg..."
        if [ "${querycmd:0:3}" == "rpm" ] ; then
        	curver=$($querycmd $pkg)
	else
		read dummy curver < <($querycmd $pkg | grep "Version: ")
		curver=$(echo $curver | cut -d':' -f2)
	fi
        if [[ "$curver" < "$ver" ]] ; then
		echo -e "\n\n\033[1;31mmic2 requires $pkg version >= $ver, please update $pkg to $ver\033[00m"
		exit 1
	else
		echo "OK"
	fi
}

distros=("Fedora" "Redhat" "CentOS" "openSUSE" "SUSE" "Ubuntu" "Debian" "MeeGo")
extrapkgs=()

if [ $(id -u) != 0 ]; then
    echo "You must be root to run this script"
    exit 1
fi

# Check linux distro
release=$(cat /etc/*-release)
if [ $? -ne 0 ] ; then
	release=$(cat /etc/issue)
fi
distro=""
for ((i=0;i<${#distros[@]};i++))
do
	echo $release | grep -i "${distros[$i]}" > /dev/null 2>&1
	if [ $? -eq 0 ] ; then
		distro=${distros[$i]}
		break
	fi
done

if [ -z $distro ] ; then
	echo "Image Creator doesn't support this linux distro"
	exit 1
fi

requiredpkgs=("autoconf" "automake" "yum" "rpm" "kpartx" "parted" "syslinux" "curl" "gcc" "bzip2" "gzip" "python-iniparse" "python-zypp")

case $distro in
	"Fedora" | "Redhat" | "CentOS")
		installer="yum -y install"
		querycmd="rpm -q"
		qvercmd="rpm -q --qf %{VERSION}"
		extrapkgs=("pykickstart" "isomd5sum" "squashfs-tools" "device-mapper" "sqlite" "zlib-devel" "python-devel" "qemu-img" "make")
		;;
	 "MeeGo")
		installer="zypper install"
		querycmd="rpm -q"
		qvercmd="rpm -q --qf %{VERSION}"
		extrapkgs=("pykickstart" "isomd5sum" "squashfs-tools" "device-mapper" "sqlite" "zlib-devel" "python-devel" "make")
		;;
	"openSUSE")
		installer="zypper install"
		querycmd="rpm -q"
		qvercmd="rpm -q --qf %{VERSION}"
		extrapkgs=("pykickstart" "squashfs" "device-mapper" "sqlite3" "zlib-devel" "python-devel" "qemu" "make")
		;;
	"SUSE")
		installer="zypper install"
		querycmd="rpm -q"
		qvercmd="rpm -q --qf %{VERSION}"
		extrapkgs=("pykickstart" "isomd5sum" "squashfs-tools" "device-mapper" "sqlite" "zlib-devel" "python-devel" "qemu-img")
		;;
	"Ubuntu")
		installer="apt-get install"
		querycmd="dpkg -s"
		qvercmd="dpkg -s"
		extrapkgs=("python-pykickstart" "isomd5sum" "squashfs-tools" "python-dev" "dmsetup" "sqlite3" "libsqlite3-0" "zlib1g-dev" "qemu-kvm")
        read dummy ubuntu_rel < <(lsb_release -r)
        # Include elementtree packages only if Ubuntu major release is older than 10.04
        if [ ${ubuntu_rel%%.*} -lt 10 ] ; then
            extrapkgs=(${extrapkgs[*]} "python-celementtree" "python-elementtree")
        fi
		;;
	"Debian")
		installer="apt-get install"
		querycmd="dpkg -s"
		qvercmd="dpkg -s"
		extrapkgs=("python-pykickstart" "isomd5sum" "squashfs-tools" "python-celementtree" "python-elementtree" "python-dev" "dmsetup" "sqlite3" "libsqlite3-0" "zlib1g-dev" "qemu" "kvm" "make" "mkisofs")
		;;
esac


for ((i=0;i<${#requiredpkgs[@]};i++))
do
	installpkg "$querycmd" "$installer" ${requiredpkgs[$i]}
done

for ((i=0;i<${#extrapkgs[@]};i++))
do
	installpkg "$querycmd" "$installer" ${extrapkgs[$i]}
done

# Check versions of some packages
packages=("yum" "syslinux" "squashfs-tools" "python-zypp")
versions=("3.2.24" "3.85" "4.0" "0.5.7")
for ((i=0;i<${#packages[@]};i++))
do
         checkpkgver "$qvercmd" "${packages[$i]}" "${versions[$i]}"
done 

echo ""
echo "You are ready for running Image Creator!!!"
echo ""
