#compdef downgrade

_downgrade_caching_policy () {
  [[ '/var/log/pacman.log' -nt "$1" ]]
}

_set_downgrade_cache_policy () {
  local update_policy
  zstyle -s ':completion:*:*:downgrade:*' cache-policy update_policy

  if [[ -z "$update_policy" ]]; then
    zstyle ':completion:*:*:downgrade:*' cache-policy _downgrade_caching_policy
  fi
}

_downgrade () {
  _set_downgrade_cache_policy
  _arguments -S -C \
    '--pacman[pacman command to use]:pacman command' \
    '--pacman-conf[pacman configuration file]:pacman config file:_files' \
    '*--pacman-cache[pacman cache directory]:pacman cache directory:_path_files -/' \
    '--pacman-log[pacman log file]:pacman log file:_files' \
    '--maxdepth[maximum depth to search for cached packages]:maximum search depth' \
    '--ala-url[location of ALA server]:ala url' \
    '--ala-only[only use ALA server]' \
    '--cached-only[only use cached packages]' \
    '--ignore[whether to add packages to IgnorePkg]:action:(prompt always never)' \
    '--latest[pick latest matching version]' \
    '--oldest[pick oldest matching version]' \
    '--prefer-cache[skip ala if matched in cache]' \
    '--version[show downgrade version]' \
    {-h,--help}'[show help script]' \
      '*:packages:->pkg'

  if [[ "$state" == 'pkg' ]] && [[ ! "$words" =~ '\s\-\-\s' ]]; then
    local -a packages
    if ! _retrieve_cache downgrade_packages; then
      packages=($(pacman -Ssq 2>/dev/null))
      _store_cache downgrade_packages packages
    fi
    _describe 'packages' packages
  fi
}

_downgrade "$@"

# vim: ft=zsh
