#!/bin/bash
#
# 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>

export GENERAL_VARIABLES="/lib/moxa-system-manager/general_variables"
source "${GENERAL_VARIABLES}"
export GENERAL_FUNCTIONS="/lib/moxa-system-manager/general_functions"
source "${GENERAL_FUNCTIONS}"

# initialize with default value
export MSM_OPTION_MODE="hot"
export MSM_OPTION_SIZE="n"
export MSM_OPTION_VALUE="n"
export MSM_OPTION_DIR="n"
export MSM_OPTION_DIR_PATH="/boot_device/p3/backup"
export MSM_FLAG_YES="n"
export MSM_OPTION_COMPRESS="n"

main() {
	local main_command
	local sub_command
	local ret_val

	# main commands
	case "${1}" in
	snapshot | --snapshot | -s)
		main_command="snapshot"
		case "${2}" in
		create | restore | delete | info)
			sub_command="${2}"
			shift 2
			;;
		help | -h | --help)
			snapshot_help_menu
			exit 0
			;;
		"")
			snapshot_help_menu
			exit "${_ERR_EMPTY_COMMAND}"
			;;
		*)
			snapshot_help_menu
			exit "${_ERR_COMMAND}"
			;;
		esac
		;;
	system-failback | --system-failback | -S)
		main_command="system_failback"
		case "${2}" in
		enable | disable | info | state | restore)
			sub_command="${2}"
			shift 2
			;;
		help | -h | --help)
			system_failback_help_menu
			exit 0
			;;
		"")
			system_failback_help_menu
			exit "${_ERR_EMPTY_COMMAND}"
			;;
		*)
			system_failback_help_menu
			exit "${_ERR_COMMAND}"
			;;
		esac
		;;
	default | --default | -d)
		main_command="default"
		case "${2}" in
		restore | decommission)
			sub_command="${2}"
			shift 2
			;;
		help | -h | --help)
			default_help_menu
			exit 0
			;;
		"")
			default_help_menu
			exit "${_ERR_EMPTY_COMMAND}"
			;;
		*)
			default_help_menu
			exit "${_ERR_COMMAND}"
			;;
		esac
		;;
	backup | --backup | -b)
		main_command="backup"
		case "${2}" in
		create | restore | delete | info)
			sub_command="${2}"
			shift 2
			;;
		help | -h | --help)
			backup_help_menu
			exit 0
			;;
		"")
			backup_help_menu
			exit "${_ERR_EMPTY_COMMAND}"
			;;
		*)
			backup_help_menu
			exit "${_ERR_COMMAND}"
			;;
		esac
		;;
	version | --version | -v)
		version
		exit 0
		;;
	help | -h | --help)
		help_menu
		exit 0
		;;
	"")
		help_menu
		exit "${_ERR_EMPTY_COMMAND}"
		;;
	*)
		help_menu
		exit "${_ERR_COMMAND}"
		;;
	esac

	while [ -n "${1}" ]; do
		# options
		case "${1}" in
		-D | --directory)
			MSM_OPTION_DIR="y"
			if [ -z "${2}" ]; then
				eval "${main_command}_help_menu"
				exit "${_ERR_COMMAND}"
			fi
			MSM_OPTION_DIR_PATH="${2}"
			shift 2
			;;
		-V | --value)
			MSM_OPTION_VALUE="y"
			shift 1
			;;
		--cold)
			MSM_OPTION_MODE="cold"
			shift 1
			;;
		--hot)
			MSM_OPTION_MODE="hot"
			shift 1
			;;
		--size)
			MSM_OPTION_SIZE="y"
			shift 1
			;;
		--compress)
			MSM_OPTION_COMPRESS="y"
			shift 1
			;;
		-h | --help)
			eval "${main_command}_help_menu"
			exit 0
			;;
		-y | --yes)
			MSM_FLAG_YES="y"
			shift 1
			;;
		*)
			eval "${main_command}_help_menu"
			exit "${_ERR_COMMAND}"
			;;
		esac
	done

	# check for mutually exclusive options
	if [[ "${main_command}" == "backup" || "${main_command}" == "snapshot" ]] && [ "${MSM_OPTION_MODE}" == "cold" ] && [ ${MSM_OPTION_DIR} == "y" ]; then
		eval "${main_command}_help_menu"
		exit "${_ERR_COMMAND}"
	fi

	_initial_dir

	case "${main_command}" in
	default | system_failback | snapshot | backup)
		/lib/moxa-system-manager/${main_command} "${sub_command}"
		ret_val="${?}"
		;;
	*)
		help_menu
		exit "${_ERR_COMMAND}"
		;;
	esac

	exit "${ret_val}"
}

main "${@}"

exit 0
