#!/bin/bash
# shellcheck disable=SC2034
#
# Copyright (C) MOXA Inc. All rights reserved.
# This software is distributed under the terms of the MOXA SOFTWARE NOTICE.
# See the file MOXA-SOFTWARE-NOTICE for details.
#
# Authors:
# 	2021	Wes Huang	<Wes.Huang@moxa.com>

DEVICE_MODEL_NAME=""
BOOTLOADER_WORKING_DEVICE=""
BOOTLOADER_REPLICA_DEVICE=""
SYS_ARCH=""
BOOTLOADER_DECOMMISSION=""
ROOTFS_SQAUSHFS_HASH_SIGNED=""

_determine_variables() {
	DEVICE_MODEL_NAME="$(mx-ver -m | awk '{print $1}')"

	if [ "${DEVICE_MODEL_NAME}" == "ioThinx" ]; then
		DEVICE_MODEL_NAME="$(mx-ver -m | awk '{print $1"-"$2}')"
	fi

	if [ "${DEVICE_MODEL_NAME}" == "" ]; then
		echo "[error] The device model name is empty."
	fi

	SYS_ARCH="$(uname -m)"
	if [ "${SYS_ARCH}" == "aarch64" ]; then
		ROOTFS_SQAUSHFS_HASH_SIGNED="/boot_device/p2/rootfs.sqfs.sha512sum.bin.signed"
		BOOTLOADER_DECOMMISSION="y"
	elif [ "${SYS_ARCH}" == "x86_64" ]; then
		if uname -r | grep -q "4.19"; then
			BOOTLOADER_DECOMMISSION="n"
		else
			BOOTLOADER_DECOMMISSION="y"
		fi
		ROOTFS_SQAUSHFS_HASH_SIGNED="/boot_device/p2/rootfs.sqfs.sha512sum.bin.signed"
	elif [ "${SYS_ARCH}" == "armv7l" ]; then
		if uname -r | grep -q "4.19"; then
			BOOTLOADER_DECOMMISSION="n"
		else
			BOOTLOADER_DECOMMISSION="y"
		fi
		ROOTFS_SQAUSHFS_HASH_SIGNED="/boot_device/p2/rootfs.sqfs.sha256sum.bin.signed"
	fi

	if echo "${DEVICE_MODEL_NAME}" | grep -q "ioThinx"; then
		BOOTLOADER_WORKING_DEVICE="/dev/mmcblk2boot0"
		BOOTLOADER_REPLICA_DEVICE="/dev/mmcblk2boot0"
	elif [ "${SYS_ARCH}" == "armv7l" ] || [ "${SYS_ARCH}" == "aarch64" ]; then
		if uname -r | grep -q "4.19"; then
			BOOTLOADER_WORKING_DEVICE="/dev/mtd2"
			BOOTLOADER_REPLICA_DEVICE="/dev/mtd3"
		else
			BOOTLOADER_WORKING_DEVICE="/dev/$(grep "u-boot 1" "/proc/mtd" | awk '{print $1}' | cut -d : -f 1)"
			BOOTLOADER_REPLICA_DEVICE="/dev/$(grep "u-boot 2" "/proc/mtd" | awk '{print $1}' | cut -d : -f 1)"
		fi
		if [ ! -e "${BOOTLOADER_WORKING_DEVICE}" ] || [ ! -e "${BOOTLOADER_REPLICA_DEVICE}" ]; then
			echo "[error] The mtd device path is incorrect."
		fi
	fi
}

_determine_variables

P1_DIR="/boot_device/p1"
P2_DIR="/boot_device/p2"
P3_DIR="/boot_device/p3"
SNAPSHOT_DIR="${P3_DIR}/snapshot"
WORKING_DIR="${P3_DIR}/working"
RESTORE_DIR="${P3_DIR}/restore"
DEFAULT_DIR="${P3_DIR}/default"
REPLICA_DIR="${P3_DIR}/replica"
BACKUP_DIR="${P3_DIR}/backup"
REFRESH_UPGRADE_DIR="${P3_DIR}/refresh-upgrade"
PRESERVED_DIR="${P3_DIR}/preserved"
DEFAULT_BOOT_DIR="${DEFAULT_DIR}/boot"
WORKING_BOOT_DIR="${P1_DIR}/working"
REPLICA_BOOT_DIR="${P1_DIR}/replica"
REFRESH_UPGRADE_BOOT_DIR="${REFRESH_UPGRADE_DIR}/boot"
ROOTFS_SQAUSHFS="${P2_DIR}/rootfs.sqfs"
BOOT_DIR="/boot"
TOTAL_SIZE="0"
MX_SYSTEM_MGMT_FLAG_FILE="${P3_DIR}/.mx-system-mgmt-flag"
MX_SYSTEM_MGMT_PRESERVED_FLAG_FILE="${P3_DIR}/.preserved-flag"
MX_SYSTEM_MGMT_COLD_CREATION_FLAG_FILE="${P3_DIR}/.cold-creation-flag"
MX_SYSTEM_MGMT_BACKUP_COMPRESS_FLAG_FILE="${P3_DIR}/.backup-compress-flag"
DECOMMISSION_FLAG_FILE="${P3_DIR}/.mx-system-mgmt-decommission"
MX_SYSTEM_MGMT_VER_FILE="/etc/moxa-system-manager/version"
BACKUP_INFO_FILE="${BACKUP_DIR}/info"
SNAPSHOT_INFO_FILE="${SNAPSHOT_DIR}/info"
REPLICA_INFO_FILE="${REPLICA_DIR}/info"

# for arch x86_64
EFI_VAR_UUID="44640c8a-5d42-438a-8415-97b500e31267-Redundancy"

# state value
_STATE_DISABLED=0
_STATE_ENABLED=1
_STATE_BOOTING=2
_STATE_RECOVERY=3

# error return value
_ERR_MIN_REQ_TOOL_VER=10
_ERR_MODEL_NAME=11
_ERR_HASH_VALUE=12
_ERR_DIR=13
_ERR_RSYNC=14
_ERR_CREATE_TAR=15
_ERR_EXTRACT_TAR=16

_ERR_NO_SPACE=20
_ERR_NO_SNAPSHOT_INFO=21
_ERR_NO_REPLICA_INFO=22
_ERR_NO_BACKUP_INFO=23
_ERR_NO_SYSTEM_FAILBACK=24
_ERR_NO_REFRESH_UPGRADE_SQFS=25
_ERR_NO_REFRESH_UPGRADE_ITB=26
_ERR_NO_PRESERVED_FILE=27

_ERR_CHOICE_NO=30
_ERR_UNKNOWN=31
_ERR_COMMAND=32
_ERR_EMPTY_COMMAND=33
_ERR_INCORRECT_PRESERVED_CONFIG=34
