#!/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.
#
# Name:
#	MOXA Bootloader Utility
#
# Description:
#	A set of MOXA Bootloader Tools
#
# Copyright (C) Moxa, Inc. All rights reserved.
# Copyright (C) 2022	Henry LC Chen	<HenryLC.Chen@moxa.com>

BASENAME="mx-bootloader-mgmt"
PKGNAME="moxa-bootloader-manager"

_logger() {
	echo "$1"
	logger -i -t $BASENAME "$1"
}

usage() {
	echo
	echo "Moxa Bootloader Manager Command-line Utility"
	echo
	echo "USAGE:"
	echo "    mx-bootloader-mgmt [SUBCOMMAND]"
	echo
	echo "FLAGS:"
	echo "    -h, --help                      Display the help menu"
	echo "    -v, --version                   Output version information"
	echo
	echo "SUBCOMMANDS:"
	echo "    info                            Get bootloader basic information"
	echo "    decommission                    Reset bootloader configuration and clear all logs"
	echo "    log                             Get bootloader audit log"
	echo "    mode                            Set/Get Moxa bootloader mode (Production/Developer)"
	echo "    upgrade                         Upgrade Moxa device's bootloader"
	echo "    image_auto_install              Auto install system image upon next boot"
	echo
}

version() {
	local tool_version
	tool_version="$(dpkg -l $PKGNAME | grep ^ii | awk '{print $3}')"
	echo "Tool Version: $tool_version"
}

cmd_compose() {
	cmd=$1
	cmd=${cmd//$2/$3}
	cmd="/lib/$PKGNAME/$cmd"
}

main() {
	case "$1" in
	decommission)
		cmd_compose "$*" "decommission" "mx-bootloader-decommission-tool"
		;;
	log)
		cmd_compose "$*" "log" "mx-bootloader-log-tool"
		;;
	mode)
		cmd_compose "$*" "mode" "mx-bootloader-mode-tool"
		;;
	upgrade)
		cmd_compose "$*" "upgrade" "mx-bootloader-upgrade-tool"
		;;
	image_auto_install)
		cmd_compose "$*" "image_auto_install" "mx-image-auto-install-tool"
		;;
	info)
		cmd_compose "$*" "info" "mx-bootloader-info-tool"
		;;
	-h | --help | help)
		usage
		exit 0
		;;
	-v | --version | version)
		version
		exit 0
		;;
	esac

	if [ -n "$cmd" ]; then
		$cmd
		ret_val="${?}"
	else
		usage
		exit 1
	fi

	exit "${ret_val}"
}

main "$@"
