# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@before *

# Traitements automatiques de nutools
# Au 18/06/2013, cela ne concerne que les scripts/fichiers suivants:
#   - lib/profile.d/bash_prompt
#   - lib/ulib/vcs { git_commit(), git_ensure_branch() }
# Faut-il activer les traitements automatiques de utools? Donner à cette
# variable la valeur vide pour désactiver les fonctionnalités potentiellement
# gourmandes en resources.
: "${UTOOLS_AUTO:=1}"
export UTOOLS_AUTO
# Activer le mode offline de git. Par exemple, les modifications ne sont pas
# poussées automatiquement vers l'origine.
: "${UTOOLS_VCS_OFFLINE:=}"
export UTOOLS_VCS_OFFLINE

# fonctions utilitaires pour les chemins
function __udelpath() {
    # supprimer le chemin $1 de $2(=PATH)
    local _qdir="${1//\//\\/}"
    eval "export ${2:-PATH}; ${2:-PATH}"'="${'"${2:-PATH}"'#$1:}"; '"${2:-PATH}"'="${'"${2:-PATH}"'%:$1}"; '"${2:-PATH}"'="${'"${2:-PATH}"'//:$_qdir:/:}"; [ "$'"${2:-PATH}"'" == "$1" ] && '"${2:-PATH}"'='
}
function __uaddpath() {
    # Ajouter le chemin $1 à la fin, dans $2(=PATH), s'il n'y existe pas déjà
    local _qdir="${1//\//\\/}"
    eval "export ${2:-PATH}; "'[ "${'"${2:-PATH}"'#$1:}" == "$'"${2:-PATH}"'" -a "${'"${2:-PATH}"'%:$1}" == "$'"${2:-PATH}"'" -a "${'"${2:-PATH}"'//:$_qdir:/:}" == "$'"${2:-PATH}"'" -a "$'"${2:-PATH}"'" != "$1" ] && '"${2:-PATH}"'="${'"${2:-PATH}"':+$'"${2:-PATH}"':}$1"'
}
function __uinspath() {
    # Ajouter le chemin $1 au début, dans $2(=PATH), s'il n'y existe pas déjà
    local _qdir="${1//\//\\/}"
    eval "export ${2:-PATH}; "'[ "${'"${2:-PATH}"'#$1:}" == "$'"${2:-PATH}"'" -a "${'"${2:-PATH}"'%:$1}" == "$'"${2:-PATH}"'" -a "${'"${2:-PATH}"'//:$_qdir:/:}" == "$'"${2:-PATH}"'" -a "$'"${2:-PATH}"'" != "$1" ] && '"${2:-PATH}"'="$1${'"${2:-PATH}"':+:$'"${2:-PATH}"'}"'
}

# fonctions utilitaires
function pcd() {
    local prop dir
    prop="${1:-root}"
    dir="$("@@dest@@/uproject" "get$prop")" || return 1
    [ -n "$dir" ] && cd "$dir"
}
function pconf() {
    if [ -n "$1" ]; then
        case "$1" in
        0|d|dis|disable) UTOOLS_AUTO=;;
        1|e|ena|enable) UTOOLS_AUTO=1;;
        f|full) UTOOLS_AUTO=f;;
        cycle)
            case "$UTOOLS_AUTO" in
            1) UTOOLS_AUTO=f;;
            f) UTOOLS_AUTO=;;
            *) UTOOLS_AUTO=1;;
            esac
            ;;
        n|np|nopush|o|off|offline) UTOOLS_VCS_OFFLINE=1;;
        push|on|online) UTOOLS_VCS_OFFLINE=;;
        p|cyclep)
            case "$UTOOLS_VCS_OFFLINE" in
            "") UTOOLS_VCS_OFFLINE=1;;
            *) UTOOLS_VCS_OFFLINE=;;
            esac
            ;;
        esac
        echo "UTOOLS_AUTO=$UTOOLS_AUTO; UTOOLS_VCS_OFFLINE=$UTOOLS_VCS_OFFLINE" 1>&2
    else
        local PS3 prompt nopush
        echo "=== Type de prompt ===" 1>&2
        PS3="Veuillez choisir le type de prompt: "
        select prompt in Aucun$([ -z "$UTOOLS_AUTO" ] && echo "*") Minimum$([ "$UTOOLS_AUTO" == 1 ] && echo "*") Complet$([ "$UTOOLS_AUTO" == f ] && echo "*"); do
            case "$prompt" in
            Aucun*) UTOOLS_AUTO=; break;;
            Minimum*) UTOOLS_AUTO=1; break;;
            Complet*) UTOOLS_AUTO=f; break;;
            esac
        done
        echo "=== git push automatique ===" 1>&2
        PS3="Veuillez choisir le type de push: "
        select nopush in "Après git commit, faire git push$([ -z "$UTOOLS_VCS_OFFLINE" ] && echo "*")" "Pas de git push auto$([ -n "$UTOOLS_VCS_OFFLINE" ] && echo "*")"; do
            case "$nopush" in
            "Après git commit, faire git push"*) UTOOLS_VCS_OFFLINE=; break;;
            "Pas de git push auto"*) UTOOLS_VCS_OFFLINE=1; break;;
            esac
        done
    fi
}

if [ -n "$UTOOLS_USSH_ALIAS" ]; then
    function ssh() {
        local dest="@@dest@@"
        if [ "$dest" == "@@"dest"@@" ]; then "$(which ssh)" "$@"
        else "@@dest@@/ussh" "$@"
        fi
    }
fi

# Configuration de l'umask
umask "${UTOOLS_UMASK:-0022}"

# Configuration
__uaddpath "@@dest@@" PATH
__uaddpath "@@dest@@" UINCPATH
__uaddpath "@@dest@@/legacy" UINCPATH

[ -n "$UTOOLS_LANG" -a -z "$LANG" ] && LANG="$UTOOLS_LANG"
[ -z "$UTOOLS_LANG" ] && UTOOLS_LANG="$LANG"
export LANG UTOOLS_LANG

if [ -z "$PYTHONIOENCODING" ]; then
    __shopt="$(shopt -p nocasematch)"; shopt -s nocasematch
    case "$LANG" in
    *.utf8|*.utf-8) export PYTHONIOENCODING=utf-8;;
    *@euro) export PYTHONIOENCODING=latin1;;
    esac
    eval "$__shopt"; unset __shopt
fi

# Le fichier nutoolsrc doit être chargé systématiquement
[ -f /etc/nutoolsrc ] && . /etc/nutoolsrc
[ -f ~/.nutoolsrc ] && . ~/.nutoolsrc
