# shellcheck shell=dash

xrc:mod:lib hub     \
            file/util       \
            file/encrypt    \
            file/__download \
            file/__upload   \
            file/get        \
            file/put        \
            file/eput       \
            file/cat        \
            file/ls         \
            file/parse file/link file/which file/rm

___x_cmd_hub_file(){
    local X_help_cmd='___x_cmd_hub___help file'
    help:arg-null:parse

    local op="$1"
    case "$op" in
        upload) shift
            ___x_cmd_hub_file_put "$@" ;;
        ls|ll|put|eput|cat|download|get|which|which_|rm|link|put_dist|update) shift
            "___x_cmd_hub_file_$op" "$@"                         ;;
        *)  ___x_cmd_hub_u_subcmd_invalid file "$@"              ;;
    esac
}

___x_cmd_hub_file_normalize_remotefp_(){
    x_="$1"
    ___X_CMD_WHICH_ONE_RESOURCE_TYPE=hub
    case "$x_" in
        me:*|i:*|:*)    ;;
        ?:*)            ;; # TODO: Windows style
        *:*)            ;;
        *)              x_="me:${x_}" ;;
    esac
}

___x_cmd_hub_file_normalize_remotefp(){
    local x_=
    ___x_cmd_hub_file_normalize_remotefp_ "$@" || return
    printf "%s\n" "$x_" | tr -s /
}

# Section(put_dist): freeze

___x_cmd_hub_file_put_dist(){
    local X_help_cmd='___x_cmd_hub___help file put_dist'
    help:arg-null:parse

    local localfp="$1"
    local remotefp="$2"
    [ -n "$localfp" ] || M='local file path is required' N=hub log:ret:64
    [ -n "$remotefp" ] || M='Provide resource path'       N=hub log:ret:64


    ___x_cmd wx pkg "$localfp" ___x_cmd_hub_tmp.wx || {
        ___x_cmd_ui_tf false "Failed to wx pkg $localfp: " >&2
        return 1
    }

    remotefp="$(___x_cmd_hub_file_normalize_remotefp "$remotefp")"

    local resp=
    resp=$(___x_cmd_hub_u_curl put "/api/v0/file?res=$(___x_cmd url encode "$remotefp")" -F "file=@___x_cmd_hub_tmp.wx") || {
        ___x_cmd_hub_u_handle_resp false "Failed to put $localfp to $remotefp :"
        ___x_cmd_cmds rm -rf ___x_cmd_hub_tmp.wx
        return 1
    }

    ___x_cmd_hub_u_handle_resp true "Success to put $localfp to $remotefp :"
    ___x_cmd_cmds rm -rf ___x_cmd_hub_tmp.wx
}

# EndSection
