#!/bin/sh

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

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

# Load ipmodule variables
. /opt/gira/share/devicestack/ipmodule-vars

case "$1" in
  start)
    # Parse kernel commandline options.
    #
    root=""
    for o in $(cat /proc/cmdline); do
      case $o in
        root=*)
        root=${o#root=}
        ;;
      esac
    done

    if [ -z $root ]; then
      printf "${me} Failed to detect booted root block device.\\n"
    fi

    printf "%s\\n" "$root" > /var/run/root_blkdev

    if [ -e "/boot/commissioning-mode" ]
    then
      # In commissioning mode, we cheat a little to make scripts believe we booted system A.
      # When the pre and post scripts are executed, they will the firmware to system B.
      BOOTED_SYSTEM="A"
      OFFLINE_SYSTEM="B"
    else
      for s in $(cat ${EXTPARAM}/supported_systems)
      do
        rootDevice=$(cat ${EXTPARAM}/system_${s}_root_blkdev)
        if [ "${rootDevice}" = "${root}" ]
        then
          BOOTED_SYSTEM=${s}
          if [ "${BOOTED_SYSTEM}" = "A" ]; then
            OFFLINE_SYSTEM="B"
          else
            OFFLINE_SYSTEM="A"
          fi
        fi
      done
    fi

    printf "%s\\n" "${BOOTED_SYSTEM}" > ${BOOTED_SYSTEM_FILE}
    printf "%s\\n" "${OFFLINE_SYSTEM}" > /var/run/offline_system

  cd /var/run

  ln -sf ${EXTPARAM}/system_${BOOTED_SYSTEM}_firmware_version booted_firmware_version
  ln -sf ${EXTPARAM}/system_${BOOTED_SYSTEM}_application_version booted_application_version
  ln -sf ${EXTPARAM}/system_${BOOTED_SYSTEM}_system_version booted_system_version
  ln -sf ${EXTPARAM}/system_${BOOTED_SYSTEM}_root_blkdev booted_root_blkdev
  ln -sf ${EXTPARAM}/system_${BOOTED_SYSTEM}_kernel_blkdev booted_kernel_blkdev
  if [ -f  ${EXTPARAM}/booted_boot_counter ]; then
	ln -sf ${EXTPARAM}/booted_boot_counter booted_boot_counter
	cp booted_boot_counter system_${BOOTED_SYSTEM}_boot_counter
	echo 0 > system_${OFFLINE_SYSTEM}_boot_counter
  else
	ln -sf system_${BOOTED_SYSTEM}_boot_counter booted_boot_counter
	ln -sf system_${OFFLINE_SYSTEM}_boot_counter offline_boot_counter
  fi
  ln -sf ${EXTPARAM}/system_${OFFLINE_SYSTEM}_firmware_version offline_firmware_version
  ln -sf ${EXTPARAM}/system_${OFFLINE_SYSTEM}_application_version offline_application_version
  ln -sf ${EXTPARAM}/system_${OFFLINE_SYSTEM}_system_version offline_system_version
  ln -sf ${EXTPARAM}/system_${OFFLINE_SYSTEM}_root_blkdev offline_root_blkdev
  ln -sf ${EXTPARAM}/system_${OFFLINE_SYSTEM}_kernel_blkdev offline_kernel_blkdev
  
  cd ${EXTPARAM}
  [ -h booted_application_version ] || ln -sf /var/run/booted_application_version
  [ -h booted_system_version ] || ln -sf /var/run/booted_system_version
  [ -h booted_firmware_version ] || ln -sf /var/run/booted_firmware_version
  if [ ! -f  ${EXTPARAM}/booted_boot_counter ]; then
	[ -h booted_boot_counter ] || ln -sf /var/run/booted_boot_counter
  fi
  [ -h booted_root_blkdev ] || ln -sf /var/run/booted_root_blkdev
  [ -h booted_system ] || ln -sf ${BOOTED_SYSTEM_FILE}
  [ -h offline_application_version ] || ln -sf /var/run/offline_application_version
  [ -h offline_system_version ] || ln -sf /var/run/offline_system_version
  [ -h offline_firmware_version ] || ln -sf /var/run/offline_firmware_version
  [ -h offline_boot_counter ] || ln -sf /var/run/offline_boot_counter
  [ -h offline_root_blkdev ] || ln -sf /var/run/offline_root_blkdev
  [ -h offline_system ] || ln -sf /var/run/offline_system
  [ -h system_A_boot_counter ] || ln -sf /var/run/system_A_boot_counter
  [ -h system_B_boot_counter ] || ln -sf /var/run/system_B_boot_counter
  sync
  ;;
  stop)
    ;;
  *)
    printf "Usage: %s (start|stop)\\n" "$0"
    exit 1
esac

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

exit 0
