# settings
PATH_ROOT="$PYTHONBREW_ROOT"
if [ -z "${PATH_ROOT}" ] ; then
    PATH_ROOT="$HOME/.pythonbrew"
fi
PATH_ETC="$PATH_ROOT/etc"

PATH_HOME="$PYTHONBREW_HOME"
if [ -z "${PATH_HOME}" ] ; then
    PATH_HOME="$HOME/.pythonbrew"
fi
PATH_HOME_ETC="$PATH_HOME/etc"

# py file
PY_PYTHONBREW="$PATH_ROOT/bin/pythonbrew"

# functions
__pythonbrew_set_default()
{
    PATH_PYTHONBREW="$PATH_ROOT/bin"
    PATH_PYTHONBREW_LIB="$PATH_ROOT/lib"
}

__pythonbrew_set_path()
{
    PATH_WITHOUT_PYTHONBREW=$(printf "%s" "$PATH" |
    awk -v path_root="${PATH_ROOT//\\//\\/}" 'BEGIN{RS=ORS=":"} $0 !~ path_root' |
    sed -e 's#:$##')
    export PATH=$PATH_PYTHONBREW:$PATH_WITHOUT_PYTHONBREW
    export PYTHONPATH=$PATH_PYTHONBREW_LIB
}

__pythonbrew_set_temp_path()
{
    if [[ -s "$PATH_HOME_ETC/temp" ]] ; then
        source "$PATH_HOME_ETC/temp"
        PATH_PYTHONBREW="$PATH_ROOT/bin:$PATH_PYTHONBREW_TEMP"
        PATH_PYTHONBREW_LIB="$PATH_PYTHONBREW_TEMP_LIB"
    else
        __pythonbrew_set_default
    fi
    __pythonbrew_set_path
}

__pythonbrew_set_current_path()
{
    if [[ -s "$PATH_HOME_ETC/current" ]] ; then
        source "$PATH_HOME_ETC/current"
        PATH_PYTHONBREW="$PATH_ROOT/bin:$PATH_PYTHONBREW_CURRENT"
        PATH_PYTHONBREW_LIB="$PATH_PYTHONBREW_CURRENT_LIB"
    else
        __pythonbrew_set_default
    fi
    __pythonbrew_set_path
}

__pythonbrew_reload()
{
    [[ -s "$PATH_ETC/bashrc" ]] && source "$PATH_ETC/bashrc"
}

__pythonbrew_use()
{
    [[ $? == 0 ]] && __pythonbrew_set_temp_path
}

__pythonbrew_switch()
{
    [[ $? == 0 ]] && __pythonbrew_set_current_path
}

__pythonbrew_off()
{
    [[ $? == 0 ]] && __pythonbrew_set_current_path
}

__pythonbrew_update()
{
    [[ $? == 0 ]] && __pythonbrew_reload
}

__pythonbrew_venv()
{
    if [[ $? == 0 ]] ; then
        if [[ -s "$PATH_HOME_ETC/venv.run" ]] ; then
            source "$PATH_HOME_ETC/venv.run"
            cat /dev/null > "$PATH_HOME_ETC/venv.run"
        fi
    fi
}

__pythonbrew_find_command()
{
    command_name=""
    for arg in "$@" ; do
        case $arg in
            --*) continue;;
            -*) continue;;
            *)
            command_name=$arg
            break
            ;;
        esac
    done
}

__pythonbrew_run()
{
    __pythonbrew_find_command "$@"
    "$pythonbrew" "$@"
    case $command_name in
        use) __pythonbrew_use "$@";;
        switch) __pythonbrew_switch "$@" ;;
        off) __pythonbrew_off "$@" ;;
        update) __pythonbrew_update "$@" ;;
        venv) __pythonbrew_venv "$@" ;;
    esac
    builtin hash -r
}

pythonbrew()
{
    pythonbrew=$PY_PYTHONBREW
    __pythonbrew_run "$@"
}

pybrew()
{
    pythonbrew "$@"
}

sudopybrew()
{
    pythonbrew="sudo PYTHONBREW_ROOT=$PATH_ROOT PATH=$PATH_PYTHONBREW:$PATH_WITHOUT_PYTHONBREW $PY_PYTHONBREW"
    __pythonbrew_run "$@"
}

# main
__pythonbrew_set_current_path
