# shellcheck shell=dash

# export x_LOG_FLAT
# export ___X_CMD_LOG_YML_INDENT
# export ___X_CMD_LOG_YML_PID_LIST

___x_cmd_log_sub(){
    local op="$1"
    case "$op" in
        init|fini|reset)    shift; ___x_cmd_log_sub_"${op}" "$@" ;;
        "")     return 1;;
    esac
}

___x_cmd_log_sub_init(){
    # # TODO: ?
    export x_LOG_FLAT
    export ___X_CMD_LOG_YML_INDENT
    export ___X_CMD_LOG_YML_PID_LIST

    local ___X_CMD_LOG_SUB_ID
    case "$1" in
        -i|--id)
            ___X_CMD_LOG_SUB_ID="${2:?Please provide value after $1}"
            shift 2
        ;;
    esac

    local logger="${1:?Please provide logger name}"; shift
    logger="${logger#:}"
    ___x_cmd_validenvname "$logger" || return 1

    if [ -z "$x_LOG_FLAT" ]; then
        if [ -p /dev/stdout ]; then     x_LOG_FLAT="${x_LOG_FLAT}1"
        elif [ -p /dev/stdin ]; then    x_LOG_FLAT="${x_LOG_FLAT}0"
        fi
    fi

    local pid="${___X_CMD_LOG_SUB_ID}";
    [ -n "$pid" ] || pid="$(x pidofsubshell)"

    # x_LOGFLAT
    if [ -n "$x_LOG_FLAT" ]; then

        local pid_list="$___X_CMD_LOG_YML_PID_LIST"
        if [ -z "$pid_list" ]; then
            pid_list="${pid}"
        else
            pid_list="${___X_CMD_LOG_YML_PID_LIST}|${pid}"
        fi

        ___x_cmd log ":${logger}" info -m "$1  ==>  ${pid_list##*|}"
        ___X_CMD_LOG_YML_PID_LIST=$pid_list
    else
        ___x_cmd log ":${logger}" info -S -y "$1  ==>  ${pid}"
        ___X_CMD_LOG_YML_INDENT="${___X_CMD_LOG_YML_INDENT}  "
    fi
}

___x_cmd_log_sub_fini(){
    x_LOG_FLAT="${x_LOG_FLAT%?}"
    ___X_CMD_LOG_YML_INDENT="${___X_CMD_LOG_YML_INDENT#  }"

    local t=$___X_CMD_LOG_YML_PID_LIST
    ___X_CMD_LOG_YML_PID_LIST="${___X_CMD_LOG_YML_PID_LIST%|*}"
    [ "$t" != "$___X_CMD_LOG_YML_PID_LIST" ] || ___X_CMD_LOG_YML_PID_LIST=""
}

___x_cmd_log_sub_reset(){
    x_LOG_FLAT=
    ___X_CMD_LOG_YML_INDENT=
    ___X_CMD_LOG_YML_PID_LIST=
}
