#!/bin/bash

if test "$METWORK_PROFILE_LOADED" == "1"; then
    if test "$MFEXT_HOME" != "{{MFEXT_HOME}}"; then
        echo "WARNING : Metwork profile is already loaded with MFEXT_HOME = $MFEXT_HOME"
        echo "          We load Metwork profile with MFEXT_HOME = {{MFEXT_HOME}}"
        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="{{MFEXT_HOME}}"
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={{MFEXT_VERSION}}
fi
export MFEXT_VERSION

# We load bash_utils functions
# shellcheck disable=SC1091
. {{MFEXT_HOME}}/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={{MFMODULE}}
export MFMODULE_HOME={{MFMODULE_HOME}}
export MFMODULE_VERSION={{MFMODULE_VERSION}}
export {{MFMODULE}}_HOME={{MFMODULE_HOME}}
export {{MFMODULE}}_VERSION={{MFMODULE_VERSION}}
export MFMODULE_LOWERCASE={{MFMODULE|lower}}

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

# Set MFMODULE_RUNTIME_HOME and PYTHON_EGG_CACHE
{% if MFMODULE != "MFEXT" %}
    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
{% else %}
    export PYTHON_EGG_CACHE="${TMPDIR:-/tmp}/metwork_python_egg_cache"
{% endif %}
if ! test -d "${PYTHON_EGG_CACHE}"; then
    mkdir -p "${PYTHON_EGG_CACHE}"
fi

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

# 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.10

# We configure the layers system
field_prepend LAYERAPI2_LAYERS_PATH {{MFEXT_HOME}}
field_prepend LAYERAPI2_LAYERS_PATH {{MFEXT_HOME}}/opt
{% if MFMODULE != "MFEXT" %}
    field_prepend LAYERAPI2_LAYERS_PATH {{MFMODULE_HOME}}
    field_prepend LAYERAPI2_LAYERS_PATH {{MFMODULE_HOME}}/opt
    {% if MFMODULE == "MFSERV" or MFMODULE == "MFDATA" or MFMODULE == "MFBASE" %}
        if test "${MFMODULE_RUNTIME_HOME:-}" != ""; then
            field_prepend LAYERAPI2_LAYERS_PATH ${MFMODULE_RUNTIME_HOME}/var/plugins
        fi
    {% endif %}
{% endif %}
export LAYERAPI2_LAYERS_PATH

# We load the default layer (if installed)
N=$({{MFEXT_HOME}}/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 "{% raw %}${{% endraw %}{{MFMODULE}}_CURRENT_PLUGIN_NAME:-}" = ""; then
        # We load the default layer
        layer_load default@${MFMODULE_LOWERCASE} >"/tmp/layer_load_${MFMODULE_LOWERCASE}_$$" 2>&1
        N=$("{{MFEXT_HOME}}/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 MFMODULE != "MFEXT" %}
    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
        {% include "nethard_profile" %}
        {% include "config_profile" %}
    fi
    # Set LOGPROXY_LOG_DIRECTORY (default directory for logs)
    export LOGPROXY_LOG_DIRECTORY="${MFMODULE_RUNTIME_HOME}/log"
{% endif %}

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

if test "{% raw %}${{% endraw %}{{MFMODULE}}_LOG_NUMBER_OF_ROTATED_FILES{% raw %}:-}{% endraw %}" != ""; then
    export LOGPROXY_ROTATED_FILES="{% raw %}${{% endraw %}{{MFMODULE}}_LOG_NUMBER_OF_ROTATED_FILES{% raw %}:-}{% endraw %}"
    export LOGPROXY_ROTATION_TIME="{% raw %}${{% endraw %}{{MFMODULE}}_LOG_MAX_AGE_BEFORE_ROTATION{% raw %}:-}{% endraw %}"
    export LOGPROXY_ROTATION_SIZE="{% raw %}${{% endraw %}{{MFMODULE}}_LOG_MAX_SIZE_BEFORE_ROTATION{% raw %}:-}{% endraw %}"
fi
if test "{% raw %}${{% endraw %}{{MFMODULE}}_LOG_CHMOD{% raw %}:-}{% endraw %}" != ""; then
    export LOGPROXY_CHMOD="{% raw %}${{% endraw %}{{MFMODULE}}_LOG_CHMOD{% raw %}:-}{% endraw %}"
fi

{% if MFMODULE != "MFEXT" %}
# MFLOG configuration
export MFLOG_EXTRA_CONTEXT_FUNC="mfext.mflog_addon.extra_context"
export MFLOG_JSON_ONLY_KEYS="plugin"
export MFLOG_MINIMAL_LEVEL="{% raw %}${{% endraw %}{{MFMODULE}}_LOG_MINIMAL_LEVEL{% raw %}:-}{% endraw %}"
export MFLOG_JSON_MINIMAL_LEVEL="{% raw %}${{% endraw %}{{MFMODULE}}_LOG_JSON_MINIMAL_LEVEL{% raw %}:-}{% endraw %}"
if test "{% raw %}${{% endraw %}{{MFMODULE}}_LOG_MFADMIN_FLAG{% raw %}:-}{% endraw %}" = "AUTO"; then
    if test "{% raw %}${{% endraw %}{{MFMODULE}}_ADMIN_HOSTNAME{% raw %}:-}{% endraw %}" = "null"; then
        export MFLOG_SYSLOG_ADDRESS="null"
    else
        export MFLOG_SYSLOG_ADDRESS="127.0.0.1:{% raw %}${{% endraw %}{{MFMODULE}}_VECTOR_MFLOG_PORT{% raw %}:-}{% endraw %}"
    fi
fi
export MFLOG_SYSLOG_MINIMAL_LEVEL="{% raw %}${{% endraw %}{{MFMODULE}}_LOG_MFADMIN_MINIMAL_LEVEL{% raw %}:-}{% endraw %}"
export MFLOG_SYSLOG_FORMAT="json"
export MFLOG_MINIMAL_LEVEL_OVERRIDE_FILES="/etc/metwork.config.d/{{MFMODULE_LOWERCASE}}/config/mflog_override.conf;${MFMODULE_RUNTIME_HOME}/config/mflog_override.conf;${MFMODULE_HOME}/config/mflog_override.conf;${MFEXT_HOME}/config/mflog_override.conf"
{% endif %}

if test "{% raw %}${{% endraw %}{{MFMODULE}}_MISC_CORE_SIZE{% raw %}:-}{% endraw %}" != "-1"; then
ulimit -c "{% raw %}${{% endraw %}{{MFMODULE}}_MISC_CORE_SIZE{% raw %}:-}{% endraw %}"
fi

{% block custom %}
{% endblock %}

unset METWORK_PROFILE_LOADING
export METWORK_PROFILE_LOADED=1
