#!/bin/sh
# (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 < /tmp/debinx
DEBINX="/etc/sysconfig/tcedir/$DEBINX"
DEBINX1="/tmp/debinx1"
TARGET="$1"
BUILD=`getBuild`
if [ "$BUILD" == "x86" ]; then
	DEBBUILD="i386"
elif [ "$BUILD" == "armv7" ]; then
	DEBBUILD="armhf"
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 8 "^Package: $1$" "$DEBINX" | grep -B8 "^$" > /tmp/"$1".pkgdsizelist
grep "^Size:" /tmp/"$1".pkgdsizelist | cut -f2 -d":"
rm /tmp/"$1".pkgdsizelist
}

getisize_main() {
> /tmp/"$1".pkgisizelist
grep -B 1 -A 8 "^Package: $1$" "$DEBINX" | grep -B8 "^$" > /tmp/"$1".pkgisizelist
grep "^Installed-Size:" /tmp/"$1".pkgisizelist | cut -f2 -d":"
rm /tmp/"$1".pkgisizelist
}

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] 
			}
		
		}
		
	} ' < "$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] 
			}
		
		}
		
	} ' < "$DEBINX1"
}




for I in `ls /tmp/work`; do 
grep "^$I$" /tmp/.scedebs > /dev/null 2>&1 && continue
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"/debinx.* > /dev/null 2>&1; then 
       		DEBINX1=`sudo grep -l "^Package: $I$" "$TCEDIR"/debinx.* | head -n 1 | cut -f1 -d:`
       		read FULLPATH < /tmp/work/"$I"
       		THISDEB="${FULLPATH##*/}"
   		DSIZEBYTE=`getdsize_extra "$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_extra "$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="/tmp/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 " "
  if [ "$TCERAM" == "1" ]; then
	echo " "
  	echo "`readlink /etc/sysconfig/tcedir` is located in RAM."
  	echo ""$FULLSIZE" MB is a good estimate of RAM needed, "$RAM".00 MB is available." 
  	echo " "
	FULLSIZE=`echo "$FULLSIZE" | awk '{printf("%.0f\n", $1)}'`
  	if [ "$FULLSIZE" -gt "$RAM" ]; then
		echo "WARNING: You do not have enough free RAM, you should not proceed." >> /tmp/.importfree
		echo " " >> /tmp/.importfree
	fi

  else
	echo " "
    	echo ""$HDNEEDED" MB is a good estimate of `readlink /etc/sysconfig/tcedir` space needed, "$HDFREE" MB is available."
  	echo ""$ISIZEFINAL" MB is a good estimate of RAM needed, "$RAM".00 MB is 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 [ "$ISIZEFINAL" -gt "$RAM" ]; then
		echo "WARNING: You do not have enough free RAM, you should not proceed." >> /tmp/.importfree
	fi
	if [ "$HDNEEDED" -gt "$HDFREE" ]; then
		echo "WARNING: You do not have enough `readlink /etc/sysconfig/tcedir` space, you should 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 " "
  	echo "`readlink /etc/sysconfig/tcedir` is located in RAM."
  	echo ""$FULLSIZE" MB is a good estimate of RAM needed, "$RAM".00 MB is available." 
  	echo " "
	FULLSIZE=`echo "$FULLSIZE" | awk '{printf("%.0f\n", $1)}'`
  	if [ "$FULLSIZE" -gt "$RAM" ]; then
		echo "WARNING: You do not have enough free RAM, you should 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 " "
  		echo ""$FULLSIZE" MB is a good estimate of `readlink /etc/sysconfig/tcedir` space needed, "$HDFREE" MB is available."
    		echo " "
	FULLSIZE=`echo "$FULLSIZE" | awk '{printf("%.0f\n", $1)}'`
	HDFREE=`echo "$HDFREE" | awk '{printf("%.0f\n", $1)}'`
     	if [ "$FULLSIZE" -gt "$HDFREE" ]; then
		echo "WARNING: You do not have enough `readlink /etc/sysconfig/tcedir` space, you should not proceed." >> /tmp/.importfree
    	fi
    fi
fi            
echo " "

[ -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




