#!/bin/busybox ash
# (c) Jason Williams 2013
. /etc/init.d/tc-functions

> /tmp/.importarchsize
> /tmp/.importdsize
> /tmp/.importisize
> /tmp/.oldsize
> /tmp/.importfree

TCEDIR=/etc/sysconfig/tcedir
DEBDIR="/etc/sysconfig/tcedir/import/debs"
UNPACKDIR=/etc/sysconfig/tcedir/import/
read DEBINX < /etc/sysconfig/tcedir/import/debinx/debinx
DEBINX="/etc/sysconfig/tcedir/import/debinx/$DEBINX"
DEBINX1="/etc/sysconfig/tcedir/import/debinx/debinx1"
TARGET="$1"
BUILD=`getBuild`
if [ "$BUILD" == "x86" ]; then
	DEBBUILD="i386"
elif [ "$BUILD" == "armv7" ]; then
	DEBBUILD="armhf"
elif [ "$BUILD" == "x86_64" ]; then
	DEBBUILD="amd64"
fi

[ -f /tmp/.importsizelist ] && rm /tmp/.importsizelist

read IMPORTMIRROR < /opt/tcemirror                                                                             
PREBUILTMIRROR="${IMPORTMIRROR%/}/dCore/"$BUILD"/import"
IMPORTMIRROR="${IMPORTMIRROR%/}/dCore/import"

/bb/wget -O /tmp/.importsizelist "$PREBUILTMIRROR"/.importsizelist > /dev/null 2>&1


getdsize_main() {
> /tmp/"$1".pkgdsizelist
grep -B 1 -A 10 "^Package: $1$" "$DEBINX" | grep -B10 "^$" > /tmp/"$1".pkgdsizelist
#grep "^Size:" /tmp/"$1".pkgdsizelist | cut -f2 -d":"
DEBINX1=/tmp/"$1".pkgdsizelist
getdsize_extra $1
rm /tmp/"$1".pkgdsizelist
DEBINX1="/etc/sysconfig/tcedir/import/debinx/debinx1"
}

getisize_main() {
> /tmp/"$1".pkgisizelist
grep -B 1 -A 10 "^Package: $1$" "$DEBINX" | grep -B10 "^$" > /tmp/"$1".pkgisizelist
#grep "^Installed-Size:" /tmp/"$1".pkgisizelist | cut -f2 -d":"
DEBINX1=/tmp/"$1".pkgisizelist
getisize_extra $1
rm /tmp/"$1".pkgisizelist
DEBINX1="/etc/sysconfig/tcedir/import/debinx/debinx1"
}

getdsize_extra() {
	awk -v package="Package: $1" -v build="$DEBBUILD" -v FIELD="$1: "  '
	BEGIN {
		RS=""
		FS="\n"
	}
	{
		if ($1 == package) {
			for (i=2; i <= NF; i++) {
				split($i,f,": ")

				if ( f[1] == "Architecture" ) {
					if ( f[2] == "all" )
						{}
					else if ( f[2] == build )
						{}
					else
						break
					}

				if ( f[1] == "Size" )
					{ print f[2]; exit; }
			}
		}
		
	} ' < "$DEBINX1" 
}

getisize_extra() {
	awk -v package="Package: $1" -v build="$DEBBUILD" -v FIELD="$1: "  '
	BEGIN {
		RS=""
		FS="\n"
	}
	{
		if ($1 == package) {
			for (i=2; i <= NF; i++) {
				split($i,f,": ")

				if ( f[1] == "Architecture" ) {
					if ( f[2] == "all" )
						{}
					else if ( f[2] == build )
						{}
					else
						break
					}

				if ( f[1] == "Installed-Size" )
					{ print f[2]; exit; }
			}
		}
		
	} ' < "$DEBINX1" 
}




for I in `ls /tmp/work`; do 
pgrep sce-import > /dev/null 2>&1 || exit 0
grep "^$I$" /tmp/.scedebs > /dev/null 2>&1 && continue

if ! ps a | grep "/usr/bin/deb2sce" | grep -v grep > /dev/null 2>&1; then
	exit 1
fi

if grep ^"$I": /tmp/.importsizelist >/dev/null; then
	DSIZE=`grep ^"$I": /tmp/.importsizelist | awk '{print $2}'`
	ISIZE=`grep ^"$I": /tmp/.importsizelist | awk '{print $3}'`
   	[ -f "$DEBDIR"/"$I".tar.gz ] || echo $DSIZE >> /tmp/.importdsize
	echo $DSIZE >> /tmp/.importarchsize
   	echo $ISIZE >> /tmp/.importisize
else  
   	if grep "^Package: $I$" "$TCEDIR"/import/debinx/debinx.* > /dev/null 2>&1; then 
       		DEBINX1=`grep -l "^Package: $I$" "$TCEDIR"/import/debinx/debinx.* | head -n 1 | cut -f1 -d:`
       		read FULLPATH < /tmp/work/"$I"
       		THISDEB="${FULLPATH##*/}"
   		DSIZEBYTE=`getdsize_main "$I"`
		if [ ! -z "$DSIZEBYTE" ]; then 
			if [ "$DSIZEBYTE" -eq "$DSIZEBYTE" ]; then 
   				echo "$DSIZEBYTE" >> /tmp/.importarchsize
			fi
		fi
   		[ -f "$DEBDIR"/"$THISDEB" ] || echo "$DSIZEBYTE" >> /tmp/.importdsize
   		ISIZEKB=`getisize_main "$I"` 
		if [ ! -z "$ISIZEKB" ]; then 
			if [ "$ISIZEKB" -eq "$ISIZEKB" ]; then 
   				echo $((ISIZEKB * 1024)) >> /tmp/.importisize
			fi
		fi
   		DSIZE=`grep ^"$I"-data: /tmp/.importsizelist | awk '{print $2}'`
   		ISIZE=`grep ^"$I"-data: /tmp/.importsizelist | awk '{print $3}'`
   		[ ! -f "$DEBDIR"/"$I"-data.tar.gz ] && [ ! -z "$DSIZE" ] && [ "$DSIZE" -eq "$DSIZE" ] && echo $DSIZE >> /tmp/.importdsize
   		[ ! -z "$ISIZE" ] && [ "$ISIZE" -eq "$ISIZE" ] && echo "$ISIZE" >> /tmp/.importisize
		DEBINX1="/etc/sysconfig/tcedir/import/debinx/debinx1"
	else
		read FULLPATH < /tmp/work/"$I"
       		THISDEB="${FULLPATH##*/}"
   		DSIZEBYTE=`getdsize_main "$I"`
		if [ ! -z "$DSIZEBYTE" ]; then 
			if [ "$DSIZEBYTE" -eq "$DSIZEBYTE" ]; then 
   				echo "$DSIZEBYTE" >> /tmp/.importarchsize
			fi
   		fi
   		[ -f "$DEBDIR"/"$THISDEB" ] || echo "$DSIZEBYTE" >> /tmp/.importdsize
   		ISIZEKB=`getisize_main "$I"` 
		if [ ! -z "$ISIZEKB" ]; then 
			if [ "$ISIZEKB" -eq "$ISIZEKB" ]; then 
   				echo $((ISIZEKB * 1024)) >> /tmp/.importisize
			fi
		fi
   		DSIZE=`grep ^"$I"-data: /tmp/.importsizelist | awk '{print $2}'`
   		ISIZE=`grep ^"$I"-data: /tmp/.importsizelist | awk '{print $3}'`
   		[ ! -f "$DEBDIR"/"$I"-data.tar.gz ] && [ ! -z "$DSIZE" ] && [ "$DSIZE" -eq "$DSIZE" ] && echo $DSIZE >> /tmp/.importdsize
   		[ ! -z "$ISIZE" ] && [ "$ISIZE" -eq "$ISIZE" ] && echo "$ISIZE" >> /tmp/.importisize
	fi
fi
done

DSIZEFINAL=$(echo `awk 'BEGIN{total=0};{total += $1};END{print total/1024/1024}' /tmp/.importdsize` | awk '{printf("%.2f\n", $1)}')
ISIZEFINAL=$(echo `awk 'BEGIN{total=0};{total += $1};END{print total/1024/1024}' /tmp/.importisize` | awk '{printf("%.2f\n", $1)}')
ARCHSIZEFINAL=$(echo `awk 'BEGIN{total=0};{total += $1};END{print total/1024/1024}' /tmp/.importarchsize` | awk '{printf("%.2f\n", $1)}')
SCESIZEFINAL=$(echo `awk 'BEGIN{total=0};{total += $1};END{print total/1024/1024*2}' /tmp/.importarchsize` | awk '{printf("%.2f\n", $1)}')

RAM=`free -m | grep Mem | awk '{print $4}'`
HDFREE=$(echo `/bb/df /etc/sysconfig/tcedir/ | grep -v Filesystem | awk '{print $4/1024}'` | awk '{printf("%.2f\n", $1)}')

if [ -f /etc/sysconfig/tcedir/sce/"$TARGET".sce ] && ! mount | grep " /tmp/tcloop/"$TARGET" " > /dev/null 2>&1; then
  HDNEEDED="$DSIZEFINAL"
  FULLSIZE=`echo "$HDNEEDED $ISIZEFINAL" | awk '{print $2 + $1}'`
else 
  HDNEEDED=`echo "$SCESIZEFINAL $DSIZEFINAL" | awk '{print $2 + $1}'`
  FULLSIZE=`echo "$HDNEEDED $ISIZEFINAL" | awk '{print $2 + $1}'`
fi

# TCERAM means /etc/sysconfig/tcedir resides in memory.
unset TCERAM
if ! ls -l /etc/sysconfig/tcedir | grep "\/mnt\/" > /dev/null 2>&1; then 
  	TCERAM=1
fi

# The existence of /tmp/.importram means that unpacking will occur in memory.
if [ -f /tmp/.importram ]; then
  echo " "
#  echo ""$DSIZEFINAL" MB of downloads required." 
#  echo ""$ISIZEFINAL" MB needed for unpacking archives - RAM will be used." 
#  echo ""$ARCHSIZEFINAL" MB of compressed archives will be used."
  echo "Downloads required:               "$DSIZEFINAL" MB" 
  echo "Required RAM to unpack archives:  "$ISIZEFINAL" MB" 
  echo "Compressed archives utilized:     "$ARCHSIZEFINAL" MB"
  echo " "
  if [ "$TCERAM" == "1" ]; then
	echo " "
  	echo "`readlink /etc/sysconfig/tcedir` is located in RAM."
  	echo ""$FULLSIZE" MB of RAM needed / "$RAM".00 MB available." 
  	echo " "
	FULLSIZE=`echo "$FULLSIZE" | awk '{printf("%.0f\n", $1)}'`
  	if [ "$FULLSIZE" -gt "$RAM" ]; then
		echo "${YELLOW}WARNING:${NORMAL} Not enough free RAM, recommend do not proceed." >> /tmp/.importfree
		echo " " >> /tmp/.importfree
	fi

  else
	echo " "
    	echo ""$HDNEEDED" MB of `readlink /etc/sysconfig/tcedir` space needed / "$HDFREE" MB available."
  	#echo ""$ISIZEFINAL" MB of RAM needed / "$RAM".00 MB available." 
  	echo " "
	ISIZEFINAL=` echo "$ISIZEFINAL" | awk '{printf("%.0f\n", $1)}'`
	HDNEEDED=`echo "$HDNEEDED" | awk '{printf("%.0f\n", $1)}'`
	HDFREE=`echo "$HDFREE" | awk '{printf("%.0f\n", $1)}'`
	if [ "$HDNEEDED" -gt "$HDFREE" ]; then
		echo "${YELLOW}WARNING:${NORMAL} Not enough `readlink /etc/sysconfig/tcedir` space, recommend do not proceed." >> /tmp/.importfree
	fi
  fi
else
    if [ "$TCERAM" == "1" ]; then
	echo " "
	#echo ""$DSIZEFINAL" MB of downloads required." 
  	#echo ""$ISIZEFINAL" MB needed for unpacking archives."
  	#echo ""$ARCHSIZEFINAL" MB of compressed archives will be used."
	echo "Downloads required:               "$DSIZEFINAL" MB" 
	echo "Required RAM to unpack archives:  "$ISIZEFINAL" MB" 
	echo "Compressed archives utilized:     "$ARCHSIZEFINAL" MB"
	echo " "
  	echo "`readlink /etc/sysconfig/tcedir` is located in RAM."
  	echo ""$FULLSIZE" MB of RAM needed / "$RAM".00 MB available." 
  	echo " "
	FULLSIZE=`echo "$FULLSIZE" | awk '{printf("%.0f\n", $1)}'`
  	if [ "$FULLSIZE" -gt "$RAM" ]; then
		echo "${YELLOW}WARNING:${NORMAL} Not enough free RAM, recommend do not proceed." >> /tmp/.importfree
	fi
    else
  		echo " "
  		#echo ""$DSIZEFINAL" MB of downloads required." 
  		#echo ""$ISIZEFINAL" MB needed for unpacking archives."
  		#echo ""$ARCHSIZEFINAL" MB of compressed archives will be used."
		echo "Downloads required:               "$DSIZEFINAL" MB" 
		echo "Required HD space to unpack archives:  "$ISIZEFINAL" MB"
		echo "Compressed archives utilized:     "$ARCHSIZEFINAL" MB"
		echo " "
  		echo ""$FULLSIZE" MB of `readlink /etc/sysconfig/tcedir` space needed / "$HDFREE" MB available."
    		echo " "
	FULLSIZE=`echo "$FULLSIZE" | awk '{printf("%.0f\n", $1)}'`
	HDFREE=`echo "$HDFREE" | awk '{printf("%.0f\n", $1)}'`
     	if [ "$FULLSIZE" -gt "$HDFREE" ]; then
		echo "${YELLOW}WARNING:${NORMAL} Not enough `readlink /etc/sysconfig/tcedir` space, recommend do not proceed." >> /tmp/.importfree
    	fi
    fi
fi            

[ -f /tmp/.importarchsize ] && sudo rm /tmp/.importarchsize
[ -f /tmp/.importdsize ] && sudo rm /tmp/.importdsize
[ -f /tmp/.importisize ] && sudo rm /tmp/.importisize
[ -f /tmp/.importsizelist ] && sudo rm /tmp/.importsizelist
[ -f /tmp/.oldsize ] && sudo rm /tmp/.oldsize
