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]}" )

  local dl hd tl
  for dl ( $dls ) {
    srcdst=( ${(@s.->.)dl} )
    srcdst=( ${srcdst[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/} )
    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 "{info}[{pre}patch-dl annex{info}]{error} 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 "{info}[{pre}patch-dl annex{info}] {file}${tl}{rst} downloaded successfully"
    fi
  }
fi

if [[ -n "${ICE[patch]}" ]]; then
  local -a patches
  patches=( "${(s.;.)ICE[patch]}" )
  patches=( "${patches[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" )

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

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

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

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