
common_options="-q --quiet -v --verbose --debug -h --help --urpmi-root --wait-lock"

# utility functions
_urpmi_get_medias()
{
	medias=( $( urpmq --list-media $1 2>/dev/null | sed -e 's/(/\\(/g' -e 's/)/\\)/g' -e 's/ /\\ /g' ) )
}

_urpmi_medias()
{
	# return list of available media
	local medias IFS=$'\t\n'
        # get medias list
        _urpmi_get_medias all
	# return matching ones
        COMPREPLY=( $( compgen -W '${medias[@]}' -- $cur ) )
}

_urpmi_aliases()
{
	# return list of available aliases
	COMPREPLY=( $( awk -F: '{print $1}' /etc/urpmi/parallel.cfg 2>/dev/null | grep "^${cur//\\\\/}" ) )
}

_urpmi_packages() 	 
{
	local options

	# find media selection options 	 
	for (( i=1; i < COMP_CWORD; i++ )); do
		case "${COMP_WORDS[i]}" in
			--@(excludemedia|media))
				options="$options ${COMP_WORDS[i]} ${COMP_WORDS[i+1]}"
				i=$(($i+1)) 	 
				;;
			--update)
				options="$options ${COMP_WORDS[i]}"
				;;
		esac
	done

	COMPREPLY=( $( compgen -W "$(urpmq $options --list)" -- $cur ) )
}

# urpmi completion
#
_telepites()
{
	local cur prev options

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		--media)
			_urpmi_medias
			return 0
			;;
		--excludemedia)
			_urpmi_medias
			return 0
			;;
		--sortmedia)
			_urpmi_medias
			return 0
			;;
		--parallel)
			_urpmi_aliases
			return 0
			;;
		--root|--urpmi-root)
			_filedir -d
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		# return list of available options
		options="$common_options -a -p -P -y --update --media \
			--excludemedia --sortmedia --synthesis --auto \
			--auto-select --no-uninstall --split-level \
			--split-length --fuzzy --buildrequires --install-src --clean \
			--noclean --parallel --wget --prozilla --curl \
			--limit-rate --proxy --proxy-user --bug \
			--no-verify-rpm --no-install --test --excludepath \
			--excludedocs --searchmedia --ignoresize --ignorearch \
			--strict-arch --wget-options --curl-options \
			--prozilla-options --rsync-options --resume --retry \
			--skip --prefer --nolock --more-choices"
		# add dangereous option for everything else as rurpmi
		if [[ ${COMP_WORDS[0]} != *rurpmi ]]; then
			options="$options --root --use-distrib --env \
			        --auto-orphans --replacepkgs --justdb \
				--allow-nodeps --allow-force --no-suggests --force \
				--noscripts --auto-update --keep --nokeep \
				--verify-rpm"
			for (( i=1; i < COMP_CWORD; i++ )); do
				case ${COMP_WORDS[i]} in
					----auto-update)
						options="$options --no-md5sum \
						--force-key"
						;;
				esac
			done
		fi
		COMPREPLY=( $( compgen -W "$options" -- $cur ) )
	else
		if [[ ${COMP_WORDS[0]} == *rurpmi ]]; then
			# return available packages only
			_urpmi_packages
		else
			# return available packages (unless clearly a file)
			# and rpm files
			if [[ "$cur" != */* ]]; then 	 
				_urpmi_packages 	 
			fi
			_filedir rpm
		fi
	fi
}
complete -F _telepites $filenames telepites gurpmi rurpmi installing

# urpmq completion
#
_csomagkereses()
{
	local cur prev

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		--media)
			_urpmi_medias
			return 0
			;;
		--excludemedia)
			_urpmi_medias
			return 0
			;;
		--sortmedia)
			_urpmi_medias
			return 0
			;;
		--parallel)
			_urpmi_nodes
			return 0
			;;
		--list-media)
			COMPREPLY=( $( compgen -W 'all update active' -- $cur))
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		# return list of available options
		COMPREPLY=( $( compgen -W "$common_options -d -u -m -a -c -y -s -i -g -p \
			-r -f -l --update --media --excludemedia \
			--sortmedia --synthesis --auto-select --auto-orphans \
			--no-suggests --fuzzy --keep --nokeep \
			--list --list-url --list-media --list-nodes --list-aliases \
			--src --sources --provides --requires --obsoletes --suggests --summary --sourcerpm --force --parallel --wget --curl --prozilla \
			--changelog --conflicts --proxy --proxy-user --env --dump-config \
			--whatprovides --whatrequires --whatrequires-recursive \
			--skip --prefer \
			--use-distrib --searchmedia --ignorearch" -- $cur))
	else
		# return rpm files (can't list available packages anymore)
		_filedir rpm
	fi
}
complete -F _csomagkereses urpmq csomagkereses

# urpme completion
#

_eltavolitas()
{
	local cur prev

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		# return list of available options
		COMPREPLY=( $( compgen -W "$common_options -a --auto --test \
			--auto-orphans --parallel --justdb --noscripts" -- $cur ) )
	else
		# return list of available packages
		_rpm_installed_packages
	fi
}
complete -F _eltavolitas eltavolitas removing

# frissites completion
#
_frissites()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		# return list of available options
		COMPREPLY=( $( compgen -W "$common_options -a -f --wget --prozilla \
			--curl --limit-rate --proxy --proxy-user --update \
			--ignore --no-ignore \
			--no-md5sum --force-key --norebuild" \
			-- $cur))
	else
		# return list of available media
		_urpmi_medias
	fi
}
complete -F _frissites urpmi.update frissites


_szolgaltatasok()
{
	local cur prev split=false

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	_split_longopt && split=true

	case "$prev" in
	@(?(--level=)[1-6]|--@(list|add|del|override)))
		_services
		return 0
		;;
	--level)
		COMPREPLY=( $( compgen -W '1 2 3 4 5 6' -- $cur ) )
		return 0
		;;
	esac

	$split && return 0

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--list --add --del --override \
						--level' -- $cur ) )
	else
		if [ $COMP_CWORD -eq 2 -o $COMP_CWORD -eq 4 ]; then
			COMPREPLY=( $( compgen -W 'on off reset \
						resetpriorities' -- $cur ) )
		else
			_services
		fi
	fi
} &&
complete -F _szolgaltatasok szolgaltatasok services
