#!/bin/bash

if test "$METWORK_PROFILE_LOADED" == "1"; then
    if test "$MFEXT_HOME" != "/opt/metwork-mfext-master"; then
        echo "WARNING : Metwork profile is already loaded with MFEXT_HOME = $MFEXT_HOME"
        echo "          We load Metwork profile with MFEXT_HOME = /opt/metwork-mfext-master"
        echo "          But you may encounter problems by mixing 2 Metwork versions"
    fi
fi

export METWORK_PROFILE_LOADING=1

# We se the umask
umask 0022

# We set MFEXT_HOME and MFEXT_VERSION
export MFEXT_HOME="/opt/metwork-mfext-master"
MFEXT_VERSION=$(cat "${MFEXT_HOME}/config/version" 2>/dev/null)
if test "${MFEXT_VERSION}" = ""; then
    # we use build version (config/version is better with released versions)
    MFEXT_VERSION=integration.ci3308.163df259
fi
export MFEXT_VERSION

# We load bash_utils functions
# shellcheck disable=SC1091
. /opt/metwork-mfext-master/lib/bash_utils.sh

if test -f /etc/metwork.extraprofile; then
    # We load this extra profile if any
    # shellcheck disable=SC1091
    . /etc/metwork.extraprofile
fi

# Wet set MFMODULE, MFMODULE_HOME env variables
export MFMODULE=MFADMIN
export MFMODULE_HOME=/opt/metwork-mfadmin-master
export MFMODULE_VERSION=integration.ci0.unknown
export MFADMIN_HOME=/opt/metwork-mfadmin-master
export MFADMIN_VERSION=integration.ci0.unknown
export MFMODULE_LOWERCASE=mfadmin

# Set a good default value for MFMODULE_RUNTIME_SUFFIX if necessary
if ! test "$(whoami)" = "mfadmin"; then
    if test "${MFMODULE_RUNTIME_SUFFIX}" = ""; then
        export MFMODULE_RUNTIME_SUFFIX=metwork/mfadmin
    fi
fi

# Set MFMODULE_RUNTIME_HOME and PYTHON_EGG_CACHE

    if test "${MFMODULE_RUNTIME_USER}" = ""; then
        export MFMODULE_RUNTIME_USER=`whoami`
    fi
    if test "${MFMODULE_RUNTIME_HOME}" = ""; then
        CMD="echo ~${MFMODULE_RUNTIME_USER}"
        if test "${MFMODULE_RUNTIME_SUFFIX}" != ""; then
            CMD="${CMD}/${MFMODULE_RUNTIME_SUFFIX}"
        fi
        export MFMODULE_RUNTIME_HOME=`eval ${CMD}`
    fi
    export PYTHON_EGG_CACHE=${MFMODULE_RUNTIME_HOME}/tmp/python_cache

if ! test -d "${PYTHON_EGG_CACHE}"; then
    mkdir -p "${PYTHON_EGG_CACHE}"
fi

    # We set TMPDIR
    if test "${MFMODULE_RUNTIME_HOME:-}" != ""; then
        if test "${MFADMIN_CURRENT_PLUGIN_NAME:-}" = ""; then
            # else, it's already set by plugin_wrapper
            export TMPDIR="${MFMODULE_RUNTIME_HOME}/tmp";
            mkdir -p "${TMPDIR}" >/dev/null 2>&1
        fi
    fi

# Get the metwork configuration name
if test "${MFCONFIG:-}" = ""; then
    MFCONFIG=$(cat /etc/metwork.config 2>/dev/null |sed 's/ //g' |grep -v '^#' |head -1)
    if test "${MFCONFIG}" = ""; then
        MFCONFIG=GENERIC
    fi
fi
export MFCONFIG

# We set LC_NUMERIC to C
export LC_NUMERIC=C

if test "${PKG_CONFIG_PATH}" = ""; then
    # We modify PKG_CONFIG_PATH
    field_prepend PKG_CONFIG_PATH /usr/lib64/pkgconfig
    field_prepend PKG_CONFIG_PATH /lib64/pkgconfig
    export PKG_CONFIG_PATH
fi

# We set the MFMODULE_VERSION environnement variable
if test -f ${MFMODULE_HOME}/config/version; then
    MFMODULE_VERSION=$(cat ${MFMODULE_HOME}/config/version 2>/dev/null |head -1)
else
    MFMODULE_VERSION=unknown
fi
export MFMODULE_VERSION

# We set the MFMODULE_STATUS environnement variable
if test -f ${MFMODULE_HOME}/var/status; then
    MFMODULE_STATUS=$(cat ${MFMODULE_HOME}/var/status 2>/dev/null)
else
    MFMODULE_STATUS=unknown
fi
export MFMODULE_STATUS

# FIXME: do not hardcode this
export PYTHON3_SHORT_VERSION=3.13

# We configure the layers system
field_prepend LAYERAPI2_LAYERS_PATH /opt/metwork-mfext-master
field_prepend LAYERAPI2_LAYERS_PATH /opt/metwork-mfext-master/opt

    field_prepend LAYERAPI2_LAYERS_PATH /opt/metwork-mfadmin-master
    field_prepend LAYERAPI2_LAYERS_PATH /opt/metwork-mfadmin-master/opt

export LAYERAPI2_LAYERS_PATH

# We load the default layer (if installed)
N=$(/opt/metwork-mfext-master/opt/core/bin/is_layer_installed default@${MFMODULE_LOWERCASE} 2>/dev/null)
if test "${N}" = "1"; then
    # note: if we are in a plugin_env, we don't load default layers (issue mfserv#220)
    if test "${MFADMIN_CURRENT_PLUGIN_NAME:-}" = ""; then
        # We load the default layer
        layer_load default@${MFMODULE_LOWERCASE} >"/tmp/layer_load_${MFMODULE_LOWERCASE}_$$" 2>&1
        N=$("/opt/metwork-mfext-master/opt/core/bin/is_layer_loaded" default@${MFMODULE_LOWERCASE} 2>/dev/null)
        if test "${N}" != "1"; then
            ${MFEXT_HOME}/opt/core/bin/echo_bold "[ERROR]: Can't load layer default@${MFMODULE_LOWERCASE}"
            ${MFEXT_HOME}/opt/core/bin/echo_bold "[INFO]: One of the required dependency layers is probably not installed ==> so no layer at all has been loaded"
            ${MFEXT_HOME}/opt/core/bin/echo_bold "=> see /tmp/layer_load_${MFMODULE_LOWERCASE}_$$ for details"
            export PROFILE_ERROR=1
            unset METWORK_PROFILE_LOADING
            return 1
        fi
        rm -f "/tmp/layer_load_${MFMODULE_LOWERCASE}_$$"
    fi
else
    # The default layer is not installed
    # => we load the root and core layer (failback for developpers)
    layer_load root@mfext >/dev/null 2>&1
    layer_load core@mfext >/dev/null 2>&1
fi

    if ! test -d ${MFMODULE_RUNTIME_HOME}; then
        mkdir -p ${MFMODULE_RUNTIME_HOME} >/dev/null 2>&1
    fi
    if ! test -d ${MFMODULE_RUNTIME_HOME}; then
        echo "ERROR: can't create ${MFMODULE_RUNTIME_HOME} directory"
        export PROFILE_ERROR=1
        unset METWORK_PROFILE_LOADING
        return 1
    fi
    for SUBDIR in config tmp var log tmp/config_auto; do
        if ! test -d ${MFMODULE_RUNTIME_HOME}/${SUBDIR}; then
            mkdir -p ${MFMODULE_RUNTIME_HOME}/${SUBDIR} >/dev/null 2>&1
            if ! test -d ${MFMODULE_RUNTIME_HOME}/${SUBDIR}; then
                echo "ERROR: can't create ${MFMODULE_RUNTIME_HOME}/${SUBDIR} directory"
                export PROFILE_ERROR=1
                unset METWORK_PROFILE_LOADING
                return 1
            fi
        fi
    done
    if ! test -f ${MFMODULE_RUNTIME_HOME}/config/config.ini; then
        if test -f ${MFMODULE_HOME}/config/config.ini; then
            ${MFEXT_HOME}/bin/_prepare_config.py >${MFMODULE_RUNTIME_HOME}/config/config.ini 2>&1
        fi
    else
        if ! test -L ${MFMODULE_HOME}/config/config.ini; then
            if test ${MFMODULE_HOME}/config/config.ini -nt ${MFMODULE_RUNTIME_HOME}/config/config.ini; then
                N=`cat ${MFMODULE_RUNTIME_HOME}/config/config.ini |grep -v '^\[' |grep -v '^#' |grep '[a-zA-Z]' |wc -l`
                if test "${N}" -eq 0; then
                    # we can override
                    ${MFEXT_HOME}/bin/_prepare_config.py >${MFMODULE_RUNTIME_HOME}/config/config.ini 2>&1
                fi
            fi
        fi
    fi
    if ! test -f "${MFMODULE_RUNTIME_HOME}/config/mflog_override.conf"; then
        cat "${MFEXT_HOME}/share/templates/mflog_override.conf" |envtpl --reduce-multi-blank-lines >"${MFMODULE_RUNTIME_HOME}/config/mflog_override.conf"
    fi
    if test "${METWORK_BOOTSTRAP_MODE}" != "1"; then
        UUID=`cat /proc/sys/kernel/random/uuid |sed 's/-//g'`

cache_get ${MFMODULE_RUNTIME_HOME}/tmp/system.cache 1440 >${MFMODULE_RUNTIME_HOME}/tmp/system.cache.load.${UUID}
if test -s ${MFMODULE_RUNTIME_HOME}/tmp/system.cache.load.${UUID}; then
    # A cache is available, let's use it

    . ${MFMODULE_RUNTIME_HOME}/tmp/system.cache.load.${UUID}

else
    # No cache, let's compute
    _make_nethard_config.py >${MFMODULE_RUNTIME_HOME}/tmp/system.cache.write.${UUID}

    if test "${PROFILE_ERROR}" != "1"; then
        cache_set_from_file ${MFMODULE_RUNTIME_HOME}/tmp/system.cache ${MFMODULE_RUNTIME_HOME}/tmp/system.cache.write.${UUID}
    fi
    . ${MFMODULE_RUNTIME_HOME}/tmp/system.cache.write.${UUID}
    rm -f ${MFMODULE_RUNTIME_HOME}/tmp/system.cache.write.${UUID}

fi
rm -f ${MFMODULE_RUNTIME_HOME}/tmp/system.cache.load.${UUID}

export MFHOSTNAME_FULL_IP=${MFHOSTNAME_IP}
        UUID=`cat /proc/sys/kernel/random/uuid |sed 's/-//g'`

if test -f /opt/metwork-mfadmin-master/config/config.ini; then
    cache_get ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache 1440 >${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache.load.${UUID}
    if test -s ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache.load.${UUID}; then
        # Un cache est dispo, on l'utiliser
        . ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache.load.${UUID}
    else
        # Pas de cache, on recalcule
        CONF_FILE=/opt/metwork-mfadmin-master/config/config.ini
        if test -f ${MFMODULE_RUNTIME_HOME}/config/config.ini; then
            CONF_FILE=${MFMODULE_RUNTIME_HOME}/config/config.ini
        fi
        _ini_to_env.py --prefix=MFADMIN --resolve --legacy-env --generation-time "/opt/metwork-mfadmin-master/config/config.ini" "${MFMODULE_RUNTIME_HOME}/config/config.ini" "/etc/metwork.config.d/mfadmin/config.ini" >${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache.write.${UUID}
        N=`grep dns_error ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache.write.${UUID} |wc -l`
        if test ${N} -gt 0; then
            # si l'erreur DNS est lie a une modification de conf, on la prend quand meme
            if test -f "/etc/metwork.config.d/mfadmin/config.ini"; then
                EXTRA_NEWER="-newer /etc/metwork.config.d/mfadmin/config.ini"
            fi
            N2=`find ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache -newer /etc/hosts -newer /etc/resolv.conf -newer /etc/synopsis.config -newer /etc/nsswitch.conf -newer ${MFMODULE_HOME}/config/advanced_config.ini -newer /opt/metwork-mfext-master/config/advanced_config.ini ${EXTRA_NEWER} -newer ${MFMODULE_HOME}/config/config.ini -newer /opt/metwork-mfext-master/config/config.ini 2>/dev/null |wc -l`
            if test ${N2} -eq 0; then
                rm -f ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache >/dev/null 2>&1
                echo "ERROR: dns error found and we can't use the old cache value"
                export PROFILE_ERROR=1
            else
                echo "WARNING: dns error found, so we use the old cache value"
                export PROFILE_ERROR=1
            fi
        fi
        if test ${N} -gt 0 -a -s ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache; then
            # il y a des erreurs DNS :-(, on va utiliser l'ancien fichier de cache
            . ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache
        else
           . ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache.write.${UUID}
           cache_set_from_file ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache.write.${UUID}
           rm -f ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache.write.${UUID}
        fi
    fi
    rm -f ${MFMODULE_RUNTIME_HOME}/tmp/ini_to_env_mfadmin.cache.load.${UUID}
fi
    fi
    # Set LOGPROXY_LOG_DIRECTORY (default directory for logs)
    export LOGPROXY_LOG_DIRECTORY="${MFMODULE_RUNTIME_HOME}/log"

# A little kind of magic to deal with [log]/json_file=AUTO
if test "${MFADMIN_LOG_JSON_FILE:-}" = "AUTO"; then
    export MFLOG_JSON_FILE="null"
fi

if test "${MFADMIN_LOG_NUMBER_OF_ROTATED_FILES:-}" != ""; then
    export LOGPROXY_ROTATED_FILES="${MFADMIN_LOG_NUMBER_OF_ROTATED_FILES:-}"
    export LOGPROXY_ROTATION_TIME="${MFADMIN_LOG_MAX_AGE_BEFORE_ROTATION:-}"
    export LOGPROXY_ROTATION_SIZE="${MFADMIN_LOG_MAX_SIZE_BEFORE_ROTATION:-}"
fi
if test "${MFADMIN_LOG_CHMOD:-}" != ""; then
    export LOGPROXY_CHMOD="${MFADMIN_LOG_CHMOD:-}"
fi

# MFLOG configuration
export MFLOG_EXTRA_CONTEXT_FUNC="mfext.mflog_addon.extra_context"
export MFLOG_JSON_ONLY_KEYS="plugin"
export MFLOG_MINIMAL_LEVEL="${MFADMIN_LOG_MINIMAL_LEVEL:-}"
export MFLOG_JSON_MINIMAL_LEVEL="${MFADMIN_LOG_JSON_MINIMAL_LEVEL:-}"
if test "${MFADMIN_LOG_MFADMIN_FLAG:-}" = "AUTO"; then
    if test "${MFADMIN_ADMIN_HOSTNAME:-}" = "null"; then
        export MFLOG_SYSLOG_ADDRESS="null"
    else
        export MFLOG_SYSLOG_ADDRESS="127.0.0.1:${MFADMIN_VECTOR_MFLOG_PORT:-}"
    fi
fi
export MFLOG_SYSLOG_MINIMAL_LEVEL="${MFADMIN_LOG_MFADMIN_MINIMAL_LEVEL:-}"
export MFLOG_SYSLOG_FORMAT="json"
export MFLOG_MINIMAL_LEVEL_OVERRIDE_FILES="/etc/metwork.config.d/mfadmin/config/mflog_override.conf;${MFMODULE_RUNTIME_HOME}/config/mflog_override.conf;${MFMODULE_HOME}/config/mflog_override.conf;${MFEXT_HOME}/config/mflog_override.conf"

if test "${MFADMIN_MISC_CORE_SIZE:-}" != "-1"; then
ulimit -c "${MFADMIN_MISC_CORE_SIZE:-}"
fi

if test "${MFADMIN_LAYER_METRICS_LOADED:-}" != "1"; then
    # we force these params to null to avoid telegraf launch
    export MFADMIN_ADMIN_HOSTNAME=null
    export MFADMIN_ADMIN_HOSTNAME_IP=null
fi
if [ "${MFADMIN_LAYER_METRICS_LOADED:-}" != "1" -a "${MFADMIN_LAYER_LOGS_LOADED:-}" != "1" -a "${MFADMIN_LAYER_LOGS_LOKI_LOADED:-}" != "1" ]; then
    echo_bold "WARNING: both layers logs@mfadmin and metrics@mfadmin are not installed/loaded"
    echo_bold "=> you should consider installing at least one of them"
    echo_bold "   (or your mfadmin module will do nothing)"
    echo
    echo "(hint: use 'yum install metwork-mfadmin-layer-logs' and/or 'yum install metwork-mfadmin-layer-metrics'"
    echo "       as root to do that (or something similar adapted to your linux distribution))" 
    echo
fi
if [ "${MFADMIN_LAYER_LOGS_LOKI_LOADED:-}" = "1" ]; then
    export LOKI_ADDR="http://127.0.0.1:${MFADMIN_LOKI_HTTP_PORT}"
fi

unset METWORK_PROFILE_LOADING
export METWORK_PROFILE_LOADED=1
