# shellcheck shell=dash

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

    local force=
    case "$1" in
        --force|-f)     force=true; shift ;;
    esac

    local remotefp="$1"; [ -n "$remotefp" ] || M='Provide remotefp' N=hub log:ret:64
    case "$remotefp" in
      */)  M='Invalid file path' N=hub log:ret:64 ;;
    esac
    local localfp="$2"

    remotefp="$(___x_cmd_hub_file_normalize_remotefp "$remotefp")"
    localfp="$(___x_cmd_hub_file___localfp "$remotefp" "$localfp")" || return 1

    if [ -z "$force" ] && [ -f "$localfp" ] ; then
        ___x_cmd_ui_tf false "File already exists => $localfp, If you need to force overwrite, you can use the -f parameter" >&2
        return 1
    fi

    ___x_cmd_hub_file_cat "$remotefp" > "$localfp" || {
        ___x_cmd_ui_tf false "Failed to download file => $remotefp" >&2
        [ ! -f "$localfp" ] || ___x_cmd rm -f "$localfp"
        return 1
    }
    hub:info "Downloaded file => $remotefp -> $localfp"
}

# ""  "" -> "$filename"
# "a" -> "a"
# "a/" -> "a/filename"
# "<>:b" -> "b"
___x_cmd_hub_file___localfp(){
    local remotefp="$1"
    local localfp="$2"
    [ -n "$remotefp" ] || M='Provide remotefp' N=hub log:ret:64

    local filename="${remotefp#*\:}"
    filename="${filename##*/}"
    [ -n "$localfp" ] || localfp="$filename"
    [ ! -d "$localfp" ] || localfp="${localfp}/${filename}"
    [ "${localfp%/}" = "$localfp" ] || localfp="${localfp}${filename}"
    printf "%s" "$localfp"
    ___x_cmd mkdirp "$(dirname "$localfp")" || return 1
}
