#!/bin/sh
set -e

. /opt/fwu/ipmodule-functions

echo -n "started" > ${FWU_STATUS_FILE}

parse_arguments $1 $2 $3

BL_UPDATE="bl.img"
BS_UPDATE="bs.img"
BL_VERSION="bl.ver"
BS_VERSION="bs.ver"
SET_ATTR="rfs_regular_setattr.sh"
SET_ATTR_EXTRA="extra_packages_setattr.sh"

TARPIPE_POSTSCRIPT="tarpipe_postscript.sh"

check_file ${BL_UPDATE}
check_file ${BS_UPDATE}
check_file ${SET_ATTR}
check_file ${BL_VERSION}
check_file ${BS_VERSION}

check_executable ${SH}
check_executable ${CHMOD}
check_executable ${MOUNT}
check_executable ${UNMOUNT}

# This identifies the offline system and sets the variables OFFLINE_KERNEL_BLK, FIRST_KERNEL_OFFSET, SECOND_KERNEL_OFFSET, etc.
identify_offline

if [ -e "${TARPIPE_POSTSCRIPT}" ]
then
	echo "Executing tarpipe postscript."
	chmod +x "${TARPIPE_POSTSCRIPT}"
	"./${TARPIPE_POSTSCRIPT}"
else
	echo "No tarpipe post-script, skipping."
fi

if [ -e "${RAWPIPE_POSTSCRIPT}" ]
then
        echo "Executing rawpipe postscript."
        chmod +x "${RAWPIPE_POSTSCRIPT}"
        "./${RAWPIPE_POSTSCRIPT}"
else
        echo "No rawpipe post-script, skipping."
fi

echo "Preparing attribute script..."
[ -x ${SET_ATTR} ] || ${CHMOD} +x ${SET_ATTR}
cp ${SET_ATTR} ${OFFLINE_SYSTEM_DIR}

echo "Executing attribute script..."
(cd ${OFFLINE_SYSTEM_DIR} && ${SH} ${SET_ATTR} && rm -f ${SET_ATTR})

echo -n "Checking for extra attribute script ... "
if [ -e "${SET_ATTR_EXTRA}" ]
then
	echo "found."
	[ -x ${SET_ATTR_EXTRA} ] || ${CHMOD} +x ${SET_ATTR_EXTRA}
	mv ${SET_ATTR_EXTRA} ${OFFLINE_SYSTEM_DIR}
	echo "Executing extra attribute script..."
	(cd ${OFFLINE_SYSTEM_DIR} && ${SH} ${SET_ATTR_EXTRA} && rm -f ${SET_ATTR_EXTRA})
else
	echo "nothing found. Skipping."
fi


echo "Setting attributes for binaries..."
(${CHMOD} +x ${OFFLINE_SYSTEM_DIR}/opt/gira/bin/*)

# Install the default and backup kernel
echo "Writing first kernel to ${OFFLINE_KERNEL_MTD} at ${FIRST_KERNEL_OFFSET}..."
nandwrite --markbad --pad --start=${FIRST_KERNEL_OFFSET} ${OFFLINE_KERNEL_MTD} ${KERNEL_UZIMAGE}
echo "Writing second kernel to ${OFFLINE_KERNEL_MTD} at ${SECOND_KERNEL_OFFSET}..."
nandwrite --markbad --pad --start=${SECOND_KERNEL_OFFSET} ${OFFLINE_KERNEL_MTD} ${KERNEL_UZIMAGE}

unmount_offline_system

echo -n "Checking boot updater ... "
if [ -e ${BOOT_UPDATER} ]
then
	echo "found."
	[ -x ${BOOT_UPDATER} ] || ${CHMOD} +x ${BOOT_UPDATER}
	${BOOT_UPDATER} --check-and-update --target-file=/dev/mtdblock5 --bootstrap-file=${BS_UPDATE} --bootstrap-version=$(cat ${BS_VERSION}) --bootloader-file=${BL_UPDATE} --bootloader-version=$(cat ${BL_VERSION})
else
	echo "not found. Skipping."
fi

# Clean up extra_packages*.tar
rm -f extra_packages_*.tar

if [ "${COMMISSION}" != "TRUE" ]
then
	FIRMWARE_VERSION=`${DEVICESTACK} --current-firmware-version`
	cp ${DEVICECONFIG} ${DEVICECONFIG}.${FIRMWARE_VERSION}
	if [ -f ${DEVICECONFIG}.${FIRMWARE_VERSION} ]
	then
		echo "Created backup file: ${DEVICECONFIG}.${FIRMWARE_VERSION}"
	else
		echo "Failed to create backup file: ${DEVICECONFIG}.${FIRMWARE_VERSION}"
	fi
fi

sync_buffer

echo -n "stopped" > ${FWU_STATUS_FILE}
echo "The post-script has successfully done it's job and will now exit with return code 0."
exit 0
