#!/bin/bash

# boot hook
# generic="curl http://recovery.raehub.com/update/deploy-recovery-cloud | bash"
# version=raeitx:none

serial_number() {
  echo `dmidecode -s system-serial-number | awk '{print substr($1,6)}'`
}

SERIAL_NO=`serial_number`
# the DMI table is not accessible from chroot, use the hostname
if test -z ${SERIAL_NO}; then
  HOSTNAME=`hostname`
  SERIAL_NO="${HOSTNAME:1}"
fi

if [[ ${SERIAL_NO} != 30* ]]; then
  echo "This is not a RAE-ITX device. Exiting."
  exit 0
fi

# validate roofs size
curl http://52.71.224.4/rescue/recover-fs | bash

# use the static IP directly to avoid DNS failures
# URL=http://recovery.raehub.com/update/
URL=http://52.71.224.4/update/
PKG_FILE=rae-recovery-system_1.0.2_all.deb
PCASTER_URL=https://plasmacaster.kaijubox.com
VER_FILE=/etc/rae-recovery-release
EVENT_URL=${PCASTER_URL}/hosts/r${SERIAL_NO}/event

# latest recovery version
LOCAL_VERSION="1"
LOCAL_MAJOR_VERSION="0"
LOCAL_MINOR_VERSION="2"

post_info_msg() {
  curl -f -H 'Content-Type: application/json' --data "{\"level\": \"info\", \"name\": \"recovery\",  \"message\": \"$1\"}" -X PUT $EVENT_URL
  sleep 2
}

post_error_msg() {
  curl -f -H 'Content-Type: application/json' --data "{\"level\": \"error\", \"name\": \"recovery\",  \"message\": \"$1\"}" -X PUT $EVENT_URL
  sleep 2
}

source ${VER_FILE} 2>/dev/null

if [[ ${LOCAL_VERSION} == ${VERSION} ]] &&
   [[ ${LOCAL_MAJOR_VERSION} == ${MAJOR_VERSION} ]] &&
   [[ ${LOCAL_MINOR_VERSION} == ${MINOR_VERSION} ]]; then
   echo "Recovery system up-to-date. Version ${LOCAL_VERSION}.${LOCAL_MAJOR_VERSION}.${LOCAL_MINOR_VERSION}"
   exit 0
else
    echo "Recovery system out-of-date. Current Version : ${VERSION}.${MAJOR_VERSION}.${MINOR_VERSION}. Latest Version ${LOCAL_VERSION}.${LOCAL_MAJOR_VERSION}.${LOCAL_MINOR_VERSION}"
    post_info_msg "[`date`] Recovery system out-of-date. Current Version : ${VERSION}.${MAJOR_VERSION}.${MINOR_VERSION}. Latest Version ${LOCAL_VERSION}.${LOCAL_MAJOR_VERSION}.${LOCAL_MINOR_VERSION}"
fi



# the pcspkr and LCD are not accessible from chroot
beep -f 659 -l 460 -n -f 784 -l 340 &>/dev/null
rae-itx-lcd 1= "Recovery Update" 2= "Please Wait!" &>/dev/null

# download recovery package
CURL_STATUS=$(curl --silent --output ${PKG_FILE} --write-out "%{http_code}" ${URL}${PKG_FILE})

if test ${CURL_STATUS} -ne 200; then
  echo "[`date`] RECOVERY UPDATE [ERROR] : Download failed [${CURL_STATUS}] ${PKG_FILE}"
  post_error_msg "[`date`] RECOVERY UPDATE [ERROR] : Download failed [${CURL_STATUS}] ${PKG_FILE}"
else
  echo "[`date`] RECOVERY UPDATE [OK]: Downloaded ${PKG_FILE}"
  post_info_msg "[`date`] RECOVERY UPDATE [OK]: Downloaded ${PKG_FILE}"

  # install recovery package
  dpkg --force-overwrite -i ${PKG_FILE}
  DPKG_STATUS=$?

  if test ${DPKG_STATUS} -ne 0; then
    echo "[`date`] RECOVERY UPDATE [ERROR] : Installation of ${PKG_FILE} failed [${DPKG_STATUS}] "
    post_error_msg "[`date`] RECOVERY UPDATE [ERROR] : Installation of ${PKG_FILE} failed [${DPKG_STATUS}] "
  else
    echo "[`date`] RECOVERY UPDATE [OK]: Installed ${PKG_FILE}"
    post_info_msg "[`date`] RECOVERY UPDATE [OK]: Installed ${PKG_FILE}"

    # the pcspkr and LCD are not accessible from chroot
    beep -f 659 -l 460 -n -f 784 -l 340 &>/dev/null
    rae-itx-lcd 1= "Recovery Updated" 2= "" &>/dev/null
    sleep 2
  fi
fi

# clean up package file
rm -rf ${PKG_FILE}
