emulate -RL zsh
setopt extendedglob noshortloops typesetsilent warncreateglobal

if [[ "$1" = plugin ]]; then
    local type="$1" user="$2" plugin="$3" id_as="$4" dir="$5"
else
    local type="$1" url="$2" id_as="$3" dir="$4"
fi

# FUNCTION: .zinit-annex-patch-dl-download-file-stdout {{{
# Downloads file to stdout. Used by snippet loading.
# Supports following backend commands: curl, wget, lftp, lynx.
.zinit-annex-patch-dl-download-file-stdout() {
    local url="$1" restart="$2"

    setopt localoptions localtraps

    if (( restart )); then
        if (( !${path[(I)/usr/local/bin]} )); then
            path+=( "/usr/local/bin" );
            trap "path[-1]=()" EXIT
        fi

        if (( ${+commands[curl]} )) then
            command curl -fsSL "$url" || return 1
        elif (( ${+commands[wget]} )); then
            command wget -q "$url" -O - || return 1
        elif (( ${+commands[lftp]} )); then
            command lftp -c "cat $url" || return 1
            elif (( ${+commands[lynx]} )) then
            command lynx -source "$url" || return 1
        else
            return 2
        fi
    else
        if type curl 2>/dev/null 1>&2; then
            command curl -fsSL "$url" || return 1
        elif type wget 2>/dev/null 1>&2; then
            command wget -q "$url" -O - || return 1
        elif type lftp 2>/dev/null 1>&2; then
            command lftp -c "cat $url" || return 1
        else
            .zinit-annex-patch-dl-download-file-stdout "$url" "1"
            return $?
        fi
    fi

    return 0
} # }}}

if [[ -n ${ICE[dl]} && ${ICE[dl]} != ink=[-/[:alnum:]]* ]]; then
    local -a dls srcdst
    dls=( "${(s.;.)ICE[dl]}" ) # Strip leading and trailing spaces, but not new lines
    dls=( "${dls[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) # Strip leading and trailing spaces inlcuding new lines; empty strings are removed

    local dl hd tl
    for dl ( $dls ); do
        srcdst=( ${(@s.->.)dl} )
        +zi-log -- "{dbg} dl: old ${#srcdst} ${(qqq)srcdst[@]}"
        srcdst=(${${srcdst[@]##[[:blank:]]##}%%[[:blank:]]##})
        +zi-log --  "{dbg} dl: new ${#srcdst} ${(qqq)srcdst[@]}"
        hd="" tl=""

        if [[ -n ${srcdst[2]} ]]; then
            @zinit-substitute 'srcdst[2]'
            hd="${srcdst[2]:h}"
            tl="${srcdst[2]:t}"
        else
            @zinit-substitute 'srcdst[1]'
            hd="."
            tl="${${srcdst[1]%%\?*}:t}"
        fi

        local tdir="${${(M)hd:#/*}:-$dir/$hd}"

        # Create the destination directory
        command mkdir -p "$tdir"

        local ret=0

        if ! .zinit-annex-patch-dl-download-file-stdout "${srcdst[1]}" >! "$tdir/$tl"; then
            if ! .zinit-annex-patch-dl-download-file-stdout "${srcdst[1]}" 1 >! "$tdir/$tl"; then
                +zinit-message "{e} {b}patch-dl{rst}: Failed to download the URL {glob}${srcdst[1]}{rst}"
                ret=1
            fi
        fi

        if (( !ret && !OPTS[opt_-q,--quiet] && ZINIT[annex-multi-flag:pull-active] == 2 )); then
            +zinit-message "{m} {b}patch-dl{rst}: {file}$tl{rst} downloaded successfully"
        fi
    done
fi

if [[ -n "${ICE[patch]}" ]]; then
    local -a patches
    patches=( "${(s.;.)ICE[patch]}" ) # Strip leading and trailing spaces, but not new lines
    patches=( "${patches[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) # Strip leading and trailing spaces inlcuding new lines; empty strings are removed

    local pch
    for pch ( $patches ) {
        @zinit-substitute pch

        if (( !OPTS[opt_-q,--quiet] && ZINIT[annex-multi-flag:pull-active] == 2 )); then
            +zinit-message "{m} {b}patch-dl{rst}: Applying patch {pname}$pch{rst}"
        fi

        (
            builtin cd -q "$dir"
            builtin print -nP -- "%F{220}"
            command patch -s -N -p1 -i "$pch"
            builtin print -nP -- "%f"
        )
    }
fi

# vim:ft=zsh:sw=2:sts=2:et
