#!/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"

FILESYSTEM_TYPE=ext3

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

echo "Identifying offline system..."
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)

# unmount if mounted
if [ "$(mount | grep ${SYSTEM_OFFLINE} | wc -l)" -gt "0" ]
then
  umount ${SYSTEM_OFFLINE}
  echo "umount done."
else
  echo "not mounted."
fi

# create new file system
mkfs.${FILESYSTEM_TYPE} ${SYSTEM_OFFLINE}

# mount it
mount -t ${FILESYSTEM_TYPE} ${SYSTEM_OFFLINE} -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

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
