#!/bin/sh
set -e

source /opt/fwu/ipmodule-functions

echo -n "started" > ${FWU_STATUS_FILE}

parse_arguments $1 $2 $3

TAR_DIRS="rfs_regular_directories.tar"
TAR_SYMS="rfs_regular_symlinks.tar"
TAR_DEVS="rfs_regular_devices.tar"

EXTRA_DIRS="extra_packages_directories.tar"
EXTRA_SYMS="extra_packages_symlinks.tar"

TARPIPE_PRESCRIPT="tarpipe_prescript.sh"

FILESYSTEM_TYPE=ext3

echo "Identifying offline system..."

if [ ! -d "/opt/fwu/system_offline" ]
then
	mkdir "/opt/fwu/system_offline"
fi

MTD_CURRENT=`cat /opt/extparam/system_$(cat /opt/extparam/booted_system)_root_blkdev | cut -d "/" -f 3`
echo "MTD_CURRENT=${MTD_CURRENT}"

BOOTED_SYSTEM=$(cat /opt/extparam/booted_system)
echo "BOOTED_SYSTEM=${BOOTED_SYSTEM}"

if [ "${BOOTED_SYSTEM}" != "A" ]
then
  if [ "${BOOTED_SYSTEM}" != "B" ]
  then
    if [ "${COMMISSION}" != "FALSE" ]
    then
      echo "Commissioning Mode -> Selecting System B as offline system."
      OFFLINE_SYSTEM=B
    else
      echo "FATAL: Failed to select booted system. BOOTED_SYSTEM=${BOOTED_SYSTEM}"
      exit 9
    fi
  else
    echo "Update Mode -> Determined System A as offline system."
    OFFLINE_SYSTEM=A
  fi
else
  echo "Update Mode -> Determined System B as offline system."
  OFFLINE_SYSTEM=B
fi

SYSTEM_OFFLINE=$(cat /opt/extparam/system_${OFFLINE_SYSTEM}_root_blkdev)
if [ "$(mount | grep ${SYSTEM_OFFLINE} | wc -l)" -gt "0" ]
  then
    umount ${SYSTEM_OFFLINE}
    echo "umount done."
  else
    echo "not mounted."
  fi

mkfs.${FILESYSTEM_TYPE} $(cat /opt/extparam/system_${OFFLINE_SYSTEM}_root_blkdev)
mount -t ${FILESYSTEM_TYPE} $(cat /opt/extparam/system_${OFFLINE_SYSTEM}_root_blkdev) -o noatime,nodiratime /opt/fwu/system_offline

echo "Preparing directories..."
tar xf ${TAR_DIRS} -C ${OFFLINE_SYSTEM_DIR}

if [ -e "${EXTRA_DIRS}" ]
then
	tar xf ${EXTRA_DIRS} -C ${OFFLINE_SYSTEM_DIR}
	rm -f ${EXTRA_DIRS}
else
	echo "No extra packages, skipping."
fi

echo "Preparing symlinks..."
tar xf ${TAR_SYMS} -C ${OFFLINE_SYSTEM_DIR}

if [ -e "${EXTRA_SYMS}" ]
then
	tar xf ${EXTRA_SYMS} -C ${OFFLINE_SYSTEM_DIR}
	rm -f ${EXTRA_SYMS}
else
	echo "No extra packages, skipping."
fi

echo "Preparing devices..."
tar xf ${TAR_DEVS} -C ${OFFLINE_SYSTEM_DIR}/dev

if [ -e "${TARPIPE_PRESCRIPT}" ]
then
	echo "Executing tarpipe prescript."
	chmod +x "${TARPIPE_PRESCRIPT}"
	nohup "./${TARPIPE_PRESCRIPT}" &>/dev/null
fi

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