#compdef apt-file

local curcontext="$curcontext" state line expl cmds ret=1
typeset -A opt_args

_arguments -C -S \
  '(--cache -c)'{--cache,-c}'[cache directory]:directory:_directories' \
  '(-v --verbose)'{-v,--verbose}'[verbose]' \
  '(--cdrom-mount -d)'{--cdrom-mount,-d}'[cdrom mount point]:directory:_directories' \
  '(--from-file -f --from-deb -D)'{--from-file,-f}'[read patterns from given file]' \
  '(--from-deb -D --from-file -f)'{--from-dev,-D}'[use contents of given .deb archives as patterns]' \
  '(--ignore-case -i)'{--ignore-case,-i}'[ignore case]' \
  '(--regexp -x)'{--regexp,-x}'[regular expression]' \
  '(-V --version)'{-V,--version}'[version]' \
  '(-a --architecture)'{-a,--architecture}'[architecture]:architecture:_deb_architectures' \
  '(-s --sources-list)'{-s,--sources-list}'[source.list file]:file:_files' \
  '(-l --package-only)'{-l,--package-only}'[only display package name]' \
  '(-N --non-interactive)'{-N,--non-interactive}'[skip schemes requiring user input]' \
  '(-F --fixed-string)'{-F,--fixed-string}'[do not expand search pattern]' \
  '(-y --dummy)'{-y,--dummy}'[run in dummy mode]' \
  '(-)'{-h,--help}'[display help screen]' \
  '1: :->cmds' \
  '*: :->args' && ret=0

case $state in
  cmds)
    cmds=(
      'update:resynchronize package contents'
      {find,search}:'search in which package file is included'
      {list,show}:'list contents of a package'
      'purge:remove all Contents-<ARCH>.gz files in cache directory'
    )
    _describe -t commands 'apt-list command' cmds
  ;;
  args)
    case $line[1] in
      search|find)
	if (( $#opt_args[(I)(-D|--from-deb)] )); then
	  _wanted files expl 'debian package' _files -g '*.deb(-.)'
	elif (( $#opt_args[(I)(-f|--from-file)] )); then
          _files
	else
	  _message -e patterns "pattern"
	fi
      ;;
      list|show)
	_deb_packages avail
      ;;
      update|purge)
	# do nothing
      ;;
      *)
	_message "command $line[1] not available"
      ;;
    esac
  ;;
esac && ret=0

return ret
