#autoload

#
#
#
#


local expl rempat remfiles remdispf remdispd args cmd cmd_args suf ret=1
local glob host

if zstyle -T ":completion:${curcontext}:files" remote-access; then

  zparseopts -D -E -a args / g:=glob h:=host
  shift
  (( $#host)) && shift host || host="${IPREFIX%:}"

  cmd="$1"
  shift

  if [[ $cmd == ssh ]]; then
    zparseopts -D -E -a cmd_args p: 1 2 4 6 F:
    cmd_args="-o BatchMode=yes $cmd_args -a -x"
  else
    cmd_args="$@"
  fi

  if [[ -z $QIPREFIX ]]
    then rempat="${PREFIX%%[^./][^/]#}\*"
    else rempat="${(q)PREFIX%%[^./][^/]#}\*"
  fi

  remfiles=(${(M)${(f)"$(_call_program files $cmd $cmd_args $host ls -d1FL -- "$rempat" 2>/dev/null)"}%%[^/]#(|/)})

  compset -P '*/'
  compset -S '/*' || (( ${args[(I)-/]} )) || suf='remote file'

  remdispf=(${remfiles:#*/})
  remdispd=(${(M)remfiles:#*/})

  if (( $#glob )); then
    match=( '(|[*=|])' )
    glob[2]="${glob[2]/(#b)\(((|^)[p=\*])\)(#e)/}"
    glob[2]+="${${match[1]/p/\|}/\*/\*}"
    remdispf=( ${(M)remdispf:#${~glob[2]}} )
  fi

  _tags files
  while _tags; do
    while _next_label files expl ${suf:-remote directory}; do
      [[ -n $suf ]] &&
          compadd "$@" "$expl[@]" -d remdispf ${(q)remdispf%[*=|]} && ret=0
      compadd ${suf:+-S/} -r "/ \t\n\-" "$@" "$expl[@]" -d remdispd \
	${(q)remdispd%/} && ret=0
    done
    (( ret )) || return 0
  done
  return ret
else
    _message -e remote-files 'remote file'
fi
