#!/bin/sh

me="[$(printf $0 | xargs basename)]"

printf "%s Enter.\\n" "${me}"

# Load ipmodule variables
UD_MOUNTED_FILE="/opt/userdata/.mounted"
USERDATA_FS_TYPE="jffs2"
MOUNT="/bin/mount"
UD_BLOCKDEV="/dev/mtdblock4"
MP_USERDATA="/opt/userdata"
CONFIGURATION_RESET_FILE="/var/tmp/configuration_reset_condition"
CONFIGURATION_RESET="/opt/gira/bin/configuration-reset"
UD_FWU_DIR="/opt/userdata/fwu"
LOGIC_DIR="/opt/userdata/logicengine"
LOGIC_USER="logic"
FACTORY_RESET="/opt/gira/bin/factory-reset"
REBOOT="/sbin/reboot"


check_userdata()
{
  printf "${me} Checking userdata fs \\n"
  if [ -f "${UD_MOUNTED_FILE}" ]; then
    printf "${me} Userdata already mounted.\\n"
    exit 0
  fi

  printf "${me} Mounting userdata fs \\n"
  ${MOUNT} -t "${USERDATA_FS_TYPE}" -o rw,suid,sync "${UD_BLOCKDEV}" "${MP_USERDATA}"
  if [ "$(cat /proc/mounts | grep ${MP_USERDATA})" = "" ]; then
    printf "${me} Mounting userdata fs Failed!\\n"
    printf "${me} Executing factory reset.\\n"
    ${FACTORY_RESET}
    printf "${me} Rebooting NOW!\\n"
    ${REBOOT}
  fi  

  # The configuration reset can only happen if userdata is mounted, so we check here.
  CONFIGURATION_RESET_CONDITION=0
  printf "${me} Reading configuration reset condition from temp file \"${CONFIGURATION_RESET_FILE}\"\\n"
  if [ -f "${CONFIGURATION_RESET_FILE}" ]; then
    CONFIGURATION_RESET_CONDITION=$(cat ${CONFIGURATION_RESET_FILE} | tr -d '\040\011\012\015')
    printf "${me} Condition: ${CONFIGURATION_RESET_CONDITION}\\n"
  else
    printf "${me} Condition temp file \"${CONFIGURATION_RESET_FILE}\" not found!\\n"
  fi
    
  if [ "${CONFIGURATION_RESET_CONDITION}" = "enabled" ]; then
    printf "${me} Configuration reset override detected, executing configuration reset.\\n"
    ${CONFIGURATION_RESET}
  else
     printf "${me} No configuration reset override detected, skipping.\\n"
  fi
    
  printf "${me} Removing temp condition file...\\n"
  rm -f "${CONFIGURATION_RESET_FILE}"

  printf "${me} Updating mount info.\\n"
  touch "${UD_MOUNTED_FILE}"
  printf "${me} Creating FWU directory.\\n"
  mkdir -p "${UD_FWU_DIR}"
  logger -t "${me} userdata.initd" -s "Creating directories..."
  mkdir -p /opt/userdata/devicestack
  mkdir -p /opt/userdata/knxstack

  if id "${LOGIC_USER}" >/dev/null 2>&1; then
    mkdir -p "${LOGIC_DIR}"
    if [ "$(ls -ld ${LOGIC_DIR} | awk '{print $3}')" != "${LOGIC_USER}" ]; then
      printf "${me} Setting ownership of ${LOGIC_DIR} to ${LOGIC_USER} ...\\n"
      chown -R ${LOGIC_USER}:${LOGIC_USER} ${LOGIC_DIR}
    fi
  fi
}

case "$1" in
  start)
    check_userdata
    ;;
  stop)
    printf "${me} Checking userdata fs \\n"
    if [ -f "${UD_MOUNTED_FILE}" ]; then
      printf "${me} Unmounting userdata fs \\n"
      sync
      ${UMOUNT} "${MP_USERDATA}"
      if [ "$(cat /proc/mounts | grep ${MP_USERDATA})" = "" ]; then
        printf "${me} Unmounting userdata fs done.\\n"
      else
        printf "${me} Unmounting userdata fs failed.\\n"
      fi
    else
      printf "userdata fs not mounted.\\n"
    fi
    ;;
  *)
    printf "%s Usage: %s (start|stop)\\n" "${me}" "${0}"
    exit 1
esac

printf "${me} Exit.\\n"

exit 0
