# Default init script logging functions suitable for Ubuntu.
# See /lib/lsb/init-functions for usage help.
LOG_DAEMON_MSG=""

log_use_plymouth () {
    if [ "${loop:-n}" = y ]; then
        return 1
    fi
    plymouth --ping >/dev/null 2>&1
}

log_success_msg () {
    echo " * $@" || true
}

log_failure_msg () {
    if log_use_fancy_output; then
        esc=''		# escape character, printf '\033'
        red="$esc[31m"		# ANSI color escapes
        normal="$esc[0m"
        echo " $red*$normal $@" || true
    else
        echo " * $@" || true
    fi
}

log_warning_msg () {
    if log_use_fancy_output; then
        esc=''		# escape character, printf '\033'
        yellow="$esc[33m"	# ANSI color escapes
        normal="$esc[0m"
        echo " $yellow*$normal $@" || true
    else
        echo " * $@" || true
    fi
}

log_begin_msg () {
    log_daemon_msg "$1"
}

log_daemon_msg () {
    if [ -z "$1" ]; then
        return 1
    fi

    TPUT=/usr/bin/tput
    if log_use_fancy_output && $TPUT xenl >/dev/null 2>&1; then
        COLS=`$TPUT cols`
        if [ "$COLS" ] && [ "$COLS" -gt 6 ]; then
            COL=$(( COLS - 7 ))
        else
            COLS=80
            COL=73
        fi

        if log_use_plymouth; then
            # If plymouth is running, don't output anything at this time
            # to avoid buffering problems (LP: #752393)
            if [ -z "$LOG_DAEMON_MSG" ]; then
                LOG_DAEMON_MSG=$*
                return
            fi
        fi

        # We leave the cursor `hanging' about-to-wrap (see terminfo(5)
        # xenl, which is approximately right). That way if the script
        # prints anything then we will be on the next line and not
        # overwrite part of the message.

        # Previous versions of this code attempted to colour-code the
        # asterisk but this can't be done reliably because in practice
        # init scripts sometimes print messages even when they succeed
        # and we won't be able to reliably know where the colourful
        # asterisk ought to go.

        printf " * $*       " || true
        # Enough trailing spaces for ` [fail]' to fit in; if the message
        # is too long it wraps here rather than later, which is what we
        # want.
        esc=''		# escape character, printf '\033'
        movecur="$esc[${COLS}G"	# ANSI horizontal position absolute
        printf "$movecur " || true
    else
        echo " * $@" || true
        COL=
    fi
}

log_progress_msg () {
    :
}

log_end_msg () {
    if [ -z "$1" ]; then
        return 1
    fi

    if [ "$COL" ] && [ -x "$TPUT" ]; then
        # If plymouth is running, print previously stored output
        # to avoid buffering problems (LP: #752393)
        if log_use_plymouth; then
            if [ -n "$LOG_DAEMON_MSG" ]; then
                log_daemon_msg $LOG_DAEMON_MSG
                LOG_DAEMON_MSG=""
            fi
        fi

        esc=''			# escape character, printf '\033'
        movecur="$esc[$(( COL + 1 ))G"	# ANSI horizontal position absolute
        printf "\r$movecur" || true
        if [ "$1" -eq 0 ]; then
            echo "[ OK ]" || true
        else
            red="$esc[31m"	# ANSI color escapes
            normal="$esc[0m"
            echo "[${red}fail${normal}]" || true
        fi
    else
        if [ "$1" -eq 0 ]; then
            echo "   ...done." || true
        else
            echo "   ...fail!" || true
        fi
    fi
    return $1
}

log_action_msg () {
    echo " * $@" || true
}

log_action_begin_msg () {
    log_daemon_msg "$@..." || true
}

log_action_cont_msg () {
    log_daemon_msg "$@..." || true
}

log_action_end_msg () {
    # In the future this may do something with $2 as well.
    log_end_msg "$1" || true
}
