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

PKGNAME="moxa-bootloader-manager"
export LOGGER_ECHO="/lib/moxa-bootloader-manager/general/logger_echo"
export HELPER_MENU="/lib/moxa-bootloader-manager/general/mx-bootloader-helper-menu"

version_json() {
    # $@: The allowed arguments could be "-v -J" or "-J -v" or "-v".

    local json_flag
    local version_flag

    while [ -n "$1" ]; do
        case "$1" in
        -v | --version)
            version_flag="y"
            shift
            ;;
        -J | --json)
            json_flag="y"
            shift
            ;;
        *)
            $HELPER_MENU "wrong" "main"
            exit "${?}"
            ;;
        esac
    done

    if [ -z "$version_flag" ]; then
        $HELPER_MENU "wrong" "main"
        exit "${?}"
    fi

    # From now on, version_flag == "y"

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

    if [ "$json_flag" = "y" ]; then
        jq -n --arg tool_version "${tool_version}" '{toolVersion: $tool_version}'
    else
        # No json_flag
        echo "Tool Version: $tool_version"
    fi

}

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)
        $HELPER_MENU "main"
        exit "${?}"
        ;;
    -v | --version | version | -J | --json)
        version_json "$@"
        exit 0
        ;;
    esac

    if [ -n "$cmd" ]; then
        # If $2 == "-h, --help, help", the user should get the help menu without root privilege
        if [[ "$2" = "-h" || "$2" = "--help" || "$2" = "help" ]]; then
            $HELPER_MENU "$1"
            exit "${?}"
        fi
        $cmd
        ret_val="${?}"
    else
        $HELPER_MENU "wrong" "main"
        exit "${?}"
    fi

    exit "${ret_val}"
}

main "$@"
