#!/bin/busybox ash
# (c) Robert Shingledecker 2012
. /etc/init.d/tc-functions
useBusybox
checkroot
BUILD=`getBuild`
TCEDIR=/etc/sysconfig/tcedir

setupStartupScript() {
	[ -d usr/local/tce.installed ] || mkdir -p usr/local/tce.installed
	chmod 775 usr/local/tce.installed
	chown root.staff usr/local/tce.installed
}


fetchDeb() {
	sudo wget -O "$DEBS"/"$THISDEB"  ${MIRROR}/${1}
	if [ "$?" != 0 ]
	then
		echo "failed on download of $1"
		echo "$1" >> /tmp/import.log
		selectDeb ${1}
	fi
}

selectDeb() {
	FULLPATH=${1}
	SELECT_PATH="${FULLPATH%/*}"
	PKG="${1##*/}"
	wget -q -O - "$MIRROR"/"$SELECT_PATH" | awk 'BEGIN{FS=" href="}{print $2}' | awk 'BEGIN{FS="\""}{print $2}' | grep "^${PKG%%_*}" | grep ".deb$" | select "Select Package for ${PKG}" "-"
	read DEB < /tmp/select.ans
	if [ "$DEB" != "q" ]
	then
		fetchDeb ${SELECT_PATH}/${DEB}
	fi
}

getMd5sum() {
	awk -v package="Package: $1" -v FIELD="$1: "  '
	BEGIN {
		RS=""
		FS="\n"
	}
	{
		if ($1 == package) {
			for (i=2; i <= NF; i++) {
				split($i,f,": ")
				if ( f[1] == "MD5sum" )
					print f[2] 
			}
		
		}
		
	} ' < "$DEBINX"
}

cleanup() {
	rm -rf /tmp/work
	chmod 1777 /tmp
	chmod 775 /usr/local/tce.installed
	chmod 775 /usr/local/tce.icons 2>/dev/null
	chgrp staff /usr/local/tce.installed
	chgrp staff /usr/local/tce.icons 2>/dev/null
}

# Main
unset ONBOOT ONDEMAND FILE
while getopts bo OPTION
do
	case ${OPTION} in
		b) ONBOOT=TRUE ;;
		o) ONDEMAND=TRUE ;;
		*) exit 1 ;;
	esac
done
shift `expr $OPTIND - 1`

if [ -z "$1" ]
then
	echo "you must specify a target."
	exit 1
fi
TARGET="$1"

debGetEnv "$2" || exit 1
read DEBINX < /tmp/debinx
DEBINX="/etc/sysconfig/tcedir/$DEBINX"
echo "Using Package Index: $DEBINX"
read MIRROR < /opt/debmirror
echo "Using Debian Mirror: $MIRROR"
echo
unset META
#RESULTS="$(debQuery "$TARGET")"
#if [ ! "$RESULTS" ]
if sudo grep -q "$TARGET:" /tmp/.pkgprebuilt; then
	echo "$TARGET is a dCore premade package"
	META="$TARGET"

elif [ -s /tmp/.targetfile ]; then
	echo "$TARGET is from your own custom package list."
	META="$TARGET"

elif sudo grep -q "$TARGET:" /tmp/.depfile && ! sudo grep "^Package: $TARGET" "$DEBINX" > /dev/null 2>&1; then
	echo "$TARGET is a meta package of related Debian ones."
	META="$TARGET"
elif sudo grep "^Package: $TARGET" "$DEBINX" > /dev/null 2>&1; then
	echo "$TARGET is a standard Debian package."

else
	echo "$TARGET is not a standard Debian, dCore precompiled, or meta package, exiting.."
	cleanup 
	exit 1
fi

echo -n "Proceed to create $TARGET.sce? (y/N): "
read ans
[ "$ans" == "y" ] || exit 1

> /var/log/sce.log
[ -d "$TCEDIR"/sce ] || mkdir "$TCEDIR"/sce
[ -d "$TCEDIR"/import/debs ] || mkdir -p "$TCEDIR"/import/debs
DEBS="$TCEDIR"/import/debs

cd "$TCEDIR"/import
#[ -f exclude.lst ] || gzip -dc /tmp/deb2sce.xlst.gz > exclude.lst

[ -d "$TARGET" ] || mkdir "$TARGET"
cd "$TARGET"
> /tmp/import.log	

if [ -s /tmp/.targetfile ]; then
	for I in `cat /tmp/.targetfile`; do 
		debGetDeps "$I"
	done
else
	debGetDeps "$TARGET"
fi

if [ -f /tmp/.importsecure ]; then
	mkdir -p usr/local/importmd5sum
fi

HERE=`pwd`
for DEBINFO in `ls -t /tmp/work`; do
	 
	 read FULLPATH < /tmp/work/"$DEBINFO"

	 if grep "^${DEBINFO}:" /tmp/.pkgprebuilt >/dev/null; then
	 	read IMPORTMIRROR < /opt/tcemirror                                                                             
	 	PREBUILTMIRROR="${IMPORTMIRROR%/}/$(getMajorVer).x/"$BUILD"/import"
		IMPORTMIRROR="${IMPORTMIRROR%/}/$(getMajorVer).x/import"
		if wget -sq "$PREBUILTMIRROR"/"${DEBINFO}".tar.gz; then
		cd "$DEBS"
		  if [ -f "${DEBINFO}".tar.gz ]; then
			[ -f "${DEBINFO}".tar.gz.md5.txt ] && rm "${DEBINFO}".tar.gz.md5.txt
			wget -O "${DEBINFO}".tar.gz.md5.txt "$PREBUILTMIRROR"/"${DEBINFO}".tar.gz.md5.txt > /dev/null 2>&1
		
				if ! md5sum -c "${DEBINFO}".tar.gz.md5.txt >/dev/null 2>&1; then
					echo "Fetching updated "${DEBINFO}".tar.gz.."
					rm "${DEBINFO}".tar.gz*
					wget -O "${DEBINFO}".tar.gz "$PREBUILTMIRROR"/"${DEBINFO}".tar.gz
					wget -O "${DEBINFO}".tar.gz.md5.txt "$PREBUILTMIRROR"/"${DEBINFO}".tar.gz.md5.txt
				fi
			
		  else
		  	[ -f "${DEBINFO}".tar.gz ] && rm "$DEBS"/"${DEBINFO}".tar.gz
			[ -f "${DEBINFO}".tar.gz.md5.txt ] && rm "$DEBS"/"${DEBINFO}".tar.gz.md5.txt
			wget -O "${DEBINFO}".tar.gz "$PREBUILTMIRROR"/"${DEBINFO}".tar.gz
			wget -O "${DEBINFO}".tar.gz.md5.txt "$PREBUILTMIRROR"/"${DEBINFO}".tar.gz.md5.txt
		  fi
		fi
		  [ -f /tmp/"${DEBINFO}.deb2sce" ] && rm /tmp/"${DEBINFO}.deb2sce"
		  wget -O /tmp/"${DEBINFO}.deb2sce" -q "$PREBUILTMIRROR"/"${DEBINFO}.deb2sce" 2>/dev/null		
		if [ -f /tmp/"${DEBINFO}.deb2sce" ]
		then
			echo "Merging Tiny Core custom start script for ${DEBINFO}: "${DEBINFO}.deb2sce""
			setupStartupScript
			cat /tmp/"${DEBINFO}.deb2sce" > usr/local/tce.installed/"${DEBINFO}"
			chmod -R 775 usr/local/tce.installed/
			chown -R root.staff usr/local/tce.installed/
			rm /tmp/"${DEBINFO}.deb2sce"
		fi

		if md5sum -c "${DEBINFO}".tar.gz.md5.txt >/dev/null
  	 	then
		  if [ -f /tmp/.importsecure ]; then
			echo "${DEBINFO}: `cat "${DEBINFO}".tar.gz.md5.txt | cut -f1 -d" "`" >> "$TCEDIR"/import/"$TARGET"/usr/local/importmd5sum/"$TARGET".md5sum
			
		  fi
			echo "Merging "${DEBINFO}":"
    	   		tar xf "${DEBINFO}".tar.gz -C "$TCEDIR"/import/"$TARGET"
           		  
		elif [ -f "${DEBINFO}".tar.gz.md5.txt ] && ! md5sum -c "${DEBINFO}".tar.gz.md5.txt >/dev/null 2>&1
		then
			echo "md5sum failed for "${DEBINFO}".tar.gz, exiting.."
			cleanup
			exit 1
		fi	
		cd "$TCEDIR"/import/"$TARGET"

	 elif [ "$FULLPATH" != "" ]; then
	 	THISDEB="${FULLPATH##*/}"
	 	if [ -f ../debs/"$THISDEB" ]; then
			if [ ! `getMd5sum "$DEBINFO"` == `md5sum "$DEBS"/"$THISDEB" | cut -f1 -d" "` ]; then
				rm "$DEBS"/"$THISDEB"
				echo "Fetching updated "$THISDEB".."
				fetchDeb "$FULLPATH"		
			fi
		else
			fetchDeb "$FULLPATH"
		fi
		sudo debExtract "$DEBS"/"$THISDEB"
		if [ "$?" != "0" ]; then
		  echo "Failure to extract "$THISDEB", exiting.."
		  cleanup
		  exit 1
		fi
		if [ -f /tmp/.importsecure ] && [ -f /tmp/"$DEBINFO".md5sum ]; then
			echo ""$DEBINFO": `cat /tmp/"$DEBINFO".md5sum`" >> usr/local/importmd5sum/"$TARGET".md5sum
 			sudo rm /tmp/"$DEBINFO".md5sum
		fi
	 fi
done

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

cd ..
sed -i "s:APPNAME:$TARGET:g" "$TARGET"/usr/local/tce.installed/* > /dev/null 2>&1
mksquashfs "$TARGET" "$TARGET".sce
if [ "$?" == "0" ]
then
	mv "$TARGET".sce "$TCEDIR"/sce/.
	sudo rm -rf "$TARGET"
	if [ "$ONBOOT" ]
	then
		if ! grep -wq "$TARGET" "$TCEDIR"/sceboot.lst
		then
			echo "$TARGET" >> "$TCEDIR"/sceboot.lst
		fi
	fi
	[ "$ONDEMAND" ] && ondemand "$TARGET"
	echo "Done."
else
	echo "Failed."
fi

cleanup
