#autoload

_mph_packages_update_avail () {
	if ( [[ ${+_mph_avails} -eq 0 ]] ||
		_cache_invalid MPH_avails) && ! _retrieve_cache MPH_avails;
	then
		_mph_avails=(
			${(f)"$(mph-get noinstall 2>/dev/null | cut -f2 -d' ')"}
		)
		_store_cache MPH_avails _mph_avails
	fi
	cachevar=_mph_avails
}

_mph_packages_update_installed () {
	if ( [[ ${+_rpms} -eq 0 ]] ||
		_cache_invalid RPMs) && ! _retrieve_cache RPMs;
	then
		_rpms=( $(_call_program packages rpm -qa 2>/dev/null) )
		_store_cache RPMs _rpms
	fi
	cachevar=_rpms
}

_mph_packages () {
	local command="$argv[$#]" expl cachevar pkgset update_policy

	zstyle -s ":completion:*:*:$service:*" cache-policy update_policy
	[[ -z "$update_policy" ]] && zstyle ":completion:*:*:$service:*" cache-policy _mph_caching_policy

	[[ "$command" = (install|get|remove) ]] || {
		_message "_mph_packages:unknown command: $command"
		return
	}

	case $command in
	install | get)
		pkgset=avail
		;;
	remove)
		pkgset=installed
		;;
	esac

	expl=("${(@)argv[1,-2]}")

	_mph_packages_update_$pkgset

	_tags packages && compadd "$expl[@]" - "${(@P)cachevar}"
}

_mph_caching_policy () {
	oldp=( "$1"(mw+1) ) 
	(( $#oldp )) && return 0

	[[ /var/mph/lib/Packages -nt "$1" ]]
}

_mph_packages "$@"
