# Author:       Li Junhao           l@x-cmd.com
# shellcheck    shell=sh            disable=SC2039,SC1090,SC3043,SC2263

xrc:mod:lib     curl    init gencode

___x_cmd_curl(){
    local op="$1";      shift
    case "$op" in
        -h|--help)      M='curl' help:ret:0                 ;;
        fallbackrun|gencode|version_)
                        ___x_cmd_curl_"$op" "$@"            ;;
        --)             ___x_cmd___curl_origin  "$@"        ;;
        *)              ___x_cmd___curl_origin  "$op" "$@"  ;;
    esac
}

___x_cmd_curl_fallbackrun(){
    local fallbackbin="$___X_CMD_ROOT_DATA/pkg/bin/curl/curl"

    [ -e "$fallbackbin" ] ||    ___x_cmd___curl___download_curl || return $?

    "$___X_CMD_ROOT_DATA/pkg/bin/curl/curl" "$@"
}


___x_cmd_curl_version_(){
    local version_data;
    version_data="$(___x_cmd___curl_origin --version)"
    read -r x_ <<A
$version_data
A
    x_="${x_#* }"
    x_="${x_%% *}"
}

___x_cmd_curl___is_ge_776(){
    local version
    local version_major
    local version_middle

    read -r version <<A
    "$(___x_cmd___curl_origin --version)"
A
    version="${version#* }"
    version="${version%% *}"
    version_major="${version%%\.*}"
    version_middle="${version#"${version_major}"\.}"
    version_middle="${version_middle%%.*}${version##*.}"

    [ "$version_major"  -lt 8   ] || return 0
    [ "$version_major"  -eq 7   ] || return 1

    [ "$version_middle" -ge 76  ] || return 1
}

___x_cmd_curl_ensure776plus(){
    ___x_cmd_curl___is_ge_776 || {
        ___x_cmd___curl_origin(){
           ___x_cmd cosmo curl "$@"
        }
    }
}

___x_cmd_curl___isavaiable(){
    local PATH="$___X_CMD_INNER_PATH"
    local x_=""
    ___x_cmd_whichbin_ curl || return 1
    case "$x_" in
        /snap/bin/*)        return 1 ;;
    esac
}

___x_cmd___curl_origin(){
    if [ -f "$___X_CMD_ROOT_DATA/curl/config/use-fallback-curl" ]; then
        ___x_cmd___curl_origin___usefallback
    elif ___x_cmd_curl___isavaiable; then
        ___x_cmd___curl_origin___useenv
    else
        ___x_cmd___curl_origin___usefallback
    fi && ___x_cmd___curl_origin "$@"
}

___x_cmd___curl_origin___useenv(){
    eval '
    ___x_cmd___curl_origin(){
        PATH="$___X_CMD_INNER_PATH" command curl "$@"
    }
    '
}

___x_cmd___curl_origin___usefallback(){
    ___x_cmd___curl___download_curl || {
        x:error "Fail to download x-cmd provicded fallback curl."
        return 1
    }

    eval '
    ___x_cmd___curl_origin(){
        '"$___X_CMD_ROOT_DATA/pkg/bin/curl/curl"' "$@"
    }
    '
}

# code="$(x curl gencode fsdafs adf page)"

# allcode="$(x curl gencode fsdafs adf page=$page)"
# for page in 2 3; do
#    allcode="$allcode --next $(x curl gencode fsdafs adf page=$page)"
# done

# eval x curl "$allcode"

xrc setmain ___x_cmd_curl
