# shellcheck shell=dash

# proxy set 127.0.0.1:7070
# proxy set 127.0.0.1:7070 ftp=ftp://127.0.0.1:7070

___x_cmd_proxy___seti(){
    [ "$#" -gt 0 ] ||       set -- --help

    while [ "$#" -gt 0 ]; do
        case "$1" in 
            -h|--help)      ___x_cmd help -m proxy set; return 0 ;;
            --)             break   ;;

            --http|--https|--all|--ftp|--httpx|--adapt)         
                            ___x_cmd_proxy___seti_handle "$1" "${2}";                   shift 2 ;;

            http://*|https://*)
                            ___x_cmd_proxy___seti_log "Considered as --httpx $1"
                            ___x_cmd_proxy___seti_handle --httpx "$1";                  shift 1 ; break ;;
            socks*://*)
                            ___x_cmd_proxy___seti_log "Considered as --all $1"
                            ___x_cmd_proxy___seti_handle --all "$1";                    shift 1 ; break ;;

            *://*)          N=proxy M="Invalid proxy address => $1" log:ret:64 ;;
            *)              ___x_cmd_proxy___seti_log "Considered as --adapt $1"
                            ___x_cmd_proxy___seti_handle --adapt  "$1";                 shift 1 ; break  ;;
        esac
    done

    if [ -n "$___X_CMD_PROXY_SET_RUN_ENABLED" ]; then
        [ $# -gt 0 ]    ||  return 0    # 64
        [ "$1" != -- ]  ||  shift
        "$@"
    fi
}


___x_cmd_proxy___seti_log(){
    if [ -n "$___X_CMD_PROXY_SET_RUN_ENABLED" ]; then
        proxy:debug "$@"
    else
        proxy:info "$@"
    fi
}


___x_cmd_proxy___seti_handle(){
    local proxy="$2"

    case $proxy in
        https://*|http://*|socks*://*|ftp*://*)     ;;
        *)
            proxy="http://$proxy"
            ___x_cmd_proxy___seti_log "Considered as $proxy"
            ;;
    esac

    case "$1" in
        --http|http)   
            ___x_cmd_proxy___seti_log "Set http_proxy HTTP_PROXY to $proxy"
            export http_proxy="$proxy"
            export HTTP_PROXY="$proxy"      ;;
        --https|https)
            ___x_cmd_proxy___seti_log "Set https_proxy HTTPS_PROXY to $proxy"
            export https_proxy="$proxy"
            export HTTPS_PROXY="$proxy"     ;;
        --ftp|ftp)
            ___x_cmd_proxy___seti_log "Set ftp_proxy FTP_PROXY to $proxy"
            export ftp_proxy="$proxy"
            export FTP_PROXY="$proxy"       ;;
        --all|all)
            ___x_cmd_proxy___seti_log "Set all_proxy ALL_PROXY to $proxy"
            export all_proxy="$proxy"
            export ALL_PROXY="$proxy"       ;;

        --httpx)
            ___x_cmd_proxy___seti_log "Set http_proxy HTTP_PROXY to $proxy"
            export http_proxy="$proxy"
            export HTTP_PROXY="$proxy"      
            export https_proxy="$proxy"
            export HTTPS_PROXY="$proxy"      ;;

        --adapt)
            ___x_cmd_proxy___seti_log "Set adapt to $proxy"
            export http_proxy="$proxy"
            export HTTP_PROXY="$proxy"      
            export https_proxy="$proxy"
            export HTTPS_PROXY="$proxy"      
            export ftp_proxy="$proxy"
            export FTP_PROXY="$proxy"      
            proxy="socks5://${proxy#*://}"
            export all_proxy="$proxy"
            export ALL_PROXY="$proxy"       ;;
    esac
}

