#!/bin/zsh

# -----------------------------------------------------------------------------
# Functions
# Show error dialog about beamline settings and exit process with status 1.
function exit_on_error_for_beamline_settings () {
    message="Illegal beamline code has been specified."
    python3 "${UTSUSEMI_BASE_DIR}/ana/DlgSetUtsusemiEnv.py" --alert --message="${message}"
    exit 1
}
# Show error dialog about user settings and exit process with status 1.
function exit_on_error_for_user_settings () {
    message="Environment variables for Utsusemi should be specified."
    python3 "${UTSUSEMI_BASE_DIR}/ana/DlgSetUtsusemiEnv.py" --alert --message="${message}"
    exit 1
}
# Check array contains key
#   Usage:
#       contains ${array[@]} key
#   Returns:
#       If array contains key, echos "y" and returns 0.
#       Otherwise array contains key, echos "n" and returns 1.

# -----------------------------------------------------------------------------
function contains() {
    local n=$#
    #local value=${!n}
    local value=$(eval echo '$'${n})
    for ((i=1;i < $#;i++)) {
        local v=$(eval echo '$'${i})
        if [ "${v}" = "${value}" ]; then
            echo "y"
            return 0
        fi
    }
    echo "n"
    return 1
}
# 1. Configurations for local
# Set directory of this script.
#_DIR_="$(cd "$(dirname "${BASH_SOURCE:-$0}")"; pwd)"
_DIR_=$(cd $(dirname $0); pwd)

# Defined instrument codes which are candidates of UTSUSEMI_INST_CODE
DEFINEDBEAMLINE=("AMR" "HPN" "SAS" "SIK")

# If already given UTSUSEMI_INST_CODE, environment is fixed by it.
ENABLENAMES=$DEFINEDBEAMLINE
unset UTSUSEMI_INST_CODE_GIVEN
if [ ${UTSUSEMI_INST_CODE} ]; then
    if [ $(contains "${DEFINEDBEAMLINE[@]}" "${UTSUSEMI_INST_CODE}") = "y" ]; then
	UTSUSEMI_INST_CODE_GIVEN=${UTSUSEMI_INST_CODE}
    else
	exit_on_error_for_beamline_settings
    fi
fi


# Some environments variables depend on OS
unset DIR_CONF
unset SETENVFILE
if [ "$(uname)" = 'Darwin' ]; then
    DIR_CONF="${HOME}/Library/Utsusemi"
    SETENVFILE="${_DIR_}/_setEnvMac"
    DEFAULT_UTSUSEMI_DATA_DIR="${HOME}/Utsusemi/DATA"
    DEFAULT_UTSUSEMI_USR_DIR="${HOME}/Utsusemi/HOME"
    DEFAULT_UTSUSEMI_WORK_DIR="${HOME}/Utsusemi/HOME"
elif [ "$(expr substr $(uname -s) 1 5)" = 'Linux' ]; then
    DIR_CONF="${HOME}/.mlfsoft/utsusemi"
    SETENVFILE="${_DIR_}/_setEnvUbuntu"
    DEFAULT_UTSUSEMI_DATA_DIR="/data"
    DEFAULT_UTSUSEMI_USR_DIR="${HOME}"
    DEFAULT_UTSUSEMI_WORK_DIR="${HOME}"
else
    echo "Your platform ($(uname -a)) is not supported."
fi

# -----------------------------------------------------------------------------
# 2. About Configuration File

# Create the user config directory if it is not exist
if [ ! -d "${DIR_CONF}" ]; then
    mkdir -p "${DIR_CONF}"
fi

# Define environmental variable configuration file
# (UTSUSEMI_DATA_DIR & UTSUSEMI_USR_DIR)
export CONFFILE_ENV="${DIR_CONF}/utsusemienv.cfg"

# Create utusemienv.cfg if it is not exist.
#   This suppose to be called when the first launching of any applications.
#   utusemienv.cfg defines UTSUSEMI_DATA_DIR and UTSUSEMI_USR_DIR.
if [ ! -f "${CONFFILE_ENV}" ]; then
    # Create user data/private home default directories.
    if [ ! -d "${DEFAULT_UTSUSEMI_DATA_DIR}" ]; then
        mkdir -p "${DEFAULT_UTSUSEMI_DATA_DIR}"
    fi

    if [ ! -d "${DEFAULT_UTSUSEMI_USR_DIR}" ]; then
        mkdir -p "${DEFAULT_UTSUSEMI_USR_DIR}"
    fi

    # Create utusemienv.cfg with default values.
    echo "UTSUSEMI_DATA_DIR='${DEFAULT_UTSUSEMI_DATA_DIR}'" >> "${CONFFILE_ENV}"
    echo "UTSUSEMI_USR_DIR='${DEFAULT_UTSUSEMI_USR_DIR}'" >> "${CONFFILE_ENV}"
    echo "UTSUSEMI_WORK_DIR='${DEFAULT_UTSUSEMI_WORK_DIR}'" >> "${CONFFILE_ENV}"
    echo "UTSUSEMI_INST_CODE=SIK" >> "${CONFFILE_ENV}"
    echo "UTSUSEMI_LOG_QUIET=Y" >> "${CONFFILE_ENV}"
    echo "UTSUSEMI_DEBUGMODE=N" >> "${CONFFILE_ENV}"
    echo "UTSUSEMI_MULTH=2" >> "${CONFFILE_ENV}"
    echo "UTSUSEMI_DEFAULT_FONTSIZE=12" >> "${CONFFILE_ENV}"
fi

if [ ${UTSUSEMI_INST_CODE_GIVEN} ]; then
    mv "${CONFFILE_ENV}" "${CONFFILE_ENV}".org
    cat "${CONFFILE_ENV}".org |grep -v "UTSUSEMI_INST_CODE" > "${CONFFILE_ENV}"
    echo "UTSUSEMI_INST_CODE="${UTSUSEMI_INST_CODE_GIVEN} >> "${CONFFILE_ENV}"
    #rm "${CONFFILE_ENV}".org
fi

if [ "$1" = "STEP2" ]; then
    return 0
fi

# -----------------------------------------------------------------------------
# 3. Set up only the environment variable for Manyo-Lib and Python packages

if [ "$1" = "STEP3" ]; then
    source ${SETENVFILE}
    return 0
fi

# -----------------------------------------------------------------------------
# 4. Load user settings (UTSUSEMI_DATA_DIR / UTSUSEMI_USR_DIR)

source "${CONFFILE_ENV}"

export UTSUSEMI_DATA_DIR
export UTSUSEMI_USR_DIR
export UTSUSEMI_DEBUGMODE
export UTSUSEMI_INST_CODE
export UTSUSEMI_LOG_QUIET
export UTSUSEMI_MULTH
export UTSUSEMI_DEFAULT_FONTSIZE

# Check beamline var is within a valid contents.
[ $(contains "${DEFINEDBEAMLINE[@]}" "${UTSUSEMI_INST_CODE}") = "n" ] && \
    exit_on_error_for_beamline_settings

# -----------------------------------------------------------------------------
# 5. Load environment variables

source ${SETENVFILE}

#clear
echo "==========================================="
echo "  Welcome to Utsusemi Environment for ${UTSUSEMI_INST_CODE}"
echo "==========================================="

