#!/bin/bash
# Copyright (c) 2019 Huawei Technologies Co., Ltd. All rights reserved.
# This script starts a shell in ExaGear guest system.

EXAGEAR_ROOT_DIR="$(dirname "$(realpath "${BASH_SOURCE}")")"/..
EXAGEAR_ROOT_DIR="$(realpath "${EXAGEAR_ROOT_DIR}")"

EXAGEAR_WRAPPER=${EXAGEAR_ROOT_DIR}/bin/ubt-wrapper

if [ ! -z ${EXAGEAR_GUEST_ARCH_NAME} ]
then
    EXAGEAR_SUFFIX="-${EXAGEAR_GUEST_ARCH_NAME}"
fi

export EXAGEAR_CORE_CONF=${EXAGEAR_ROOT_DIR}/etc/exagear${EXAGEAR_SUFFIX}.conf

if [ ! -e ${EXAGEAR_CORE_CONF} ]
then
    echo "ExaGear configuration file ${EXAGEAR_CORE_CONF} not found!"
    echo "Wrong EXAGEAR_GUEST_ARCH_NAME env or broken ExaGear installation."
    exit 1
fi

. ${EXAGEAR_CORE_CONF}

if [ ! -z ${EXAGEAR_GUEST_IMAGE_NAME} ]
then
    export EXAGEAR_GUEST_CONF="${EXAGEAR_ROOT_DIR}/etc/exagear-guest-for-${EXAGEAR_GUEST_IMAGE_NAME}-${EXAGEAR_GUEST_ARCH_NAME}.conf"
else
    export EXAGEAR_GUEST_CONF="${EXAGEAR_ROOT_DIR}/etc/exagear-guest-${EXAGEAR_GUEST_ARCH_NAME}.conf"
fi

if [ ! -e ${EXAGEAR_GUEST_CONF} ]
then
    echo "Guest image configuration file ${EXAGEAR_GUEST_CONF} not found!"
    echo "None of exagear-guest-* packages are installed or wrong EXAGEAR_GUEST_ARCH_NAME/EXAGEAR_GUEST_IMAGE_NAME env."
    exit 1
fi

. ${EXAGEAR_GUEST_CONF}

EXAGEAR_UBT_BINARY=${EXAGEAR_UBT_OVERRIDE:-${EXAGEAR_UBT_BINARY}}
IMAGE_DIR=${EXAGEAR_ROOT_DIR}/images/${EXAGEAR_GUEST_IMAGE_NAME}
PATH=${PATH}:/usr/sbin/

function print_usage {
    echo 'Usage: exagear [--options <options>] [--container] [-- command]'
    echo "Options:"
    echo "  --options <options> - options in format of ExaGear config, separated by space"
    echo "  --container - run inside Bubblewrap container with flat filesystem"
    echo "Environment variables:"
    echo "  EXAGEAR_GUEST_ARCH_NAME - explicitly set guest architecture"
    echo "  EXAGEAR_GUEST_IMAGE_NAME - explicitly set guest image"
    echo "  EXAGEAR_UBT_OVERRIDE - explicitly set ubt binary"
    echo "  EXAGEAR_OPTIONS - override config options (same as --options)"
}

ARGS=""
while test ${#} -gt 0
do
    if [ "$1" == "--usage" ] || [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
        print_usage
        exit 0
    elif [ "$1" == "--options" ]; then
        shift
        export EXAGEAR_OPTIONS="${1}"
    elif [ "$1" == "--container" ]; then
        export EXAGEAR_IN_CONTAINER="y"
    elif [ "${1}" == "--" ]; then
        shift
        COMMAND="${1}"
        shift
        break
    else
        print_usage
        exit 1
    fi
    shift
done

ARGS=`for arg in "$@"; do printf "%q " "$arg"; done`

if [ -z "${COMMAND}" ]; then
    if [ -n "${SHELL}" ] && [ -x "${IMAGE_DIR}/${SHELL}" ]; then
        COMMAND="${SHELL}"
    else
        COMMAND="/bin/bash"
    fi
else
    COMMAND_EXPLICIT=1
fi


unset LC_CTYPE
unset LC_NUMERIC
unset LC_TIME
unset LC_COLLATE
unset LC_MONETARY
unset LC_MESSAGES
unset LC_PAPER
unset LC_NAME
unset LC_ADDRESS
unset LC_TELEPHONE
unset LC_MEASUREMENT
unset LC_IDENTIFICATION
unset LC_ALL
unset LANGUAGE
unset LANG
if [ -f ${IMAGE_DIR}/etc/default/locale ]
then
    source ${IMAGE_DIR}/etc/default/locale 2>/dev/null
	export LC_CTYPE
	export LC_NUMERIC
	export LC_TIME
	export LC_COLLATE
	export LC_MONETARY
	export LC_MESSAGES
	export LC_PAPER
	export LC_NAME
	export LC_ADDRESS
	export LC_TELEPHONE
	export LC_MEASUREMENT
	export LC_IDENTIFICATION
	export LC_ALL
	export LANGUAGE
	export LANG
fi

if [ -z "${COMMAND_EXPLICIT}" ]
then
    echo "Starting ${COMMAND} ${ARGS} in the guest image ${IMAGE_DIR}"
fi

eval ${EXAGEAR_WRAPPER} ${COMMAND} ${ARGS}
