_cdemu()
{
	local cur prev prev2 cword words opts cmds parms
	COMPREPLY=()
	_get_comp_words_by_ref cur prev cword words
	prev2="${words[cword - 2]}"

	opts="-h --help -v --version -b --bus"
	cmds="load unload status device-mapping daemon-debug-mask library-debug-mask dpm-emulation tr-emulation device-id enum-supported-parsers enum-supported-fragments enum-daemon-debug-masks enum-library-debug-masks version"
	parms="--password --encoding --dvd-report-css"

	case "${prev}" in
		"load" | "unload" | "daemon-debug-mask" | "library-debug-mask" | "dpm-emulation" | "tr-emulation" | "device-id")
			local devices=$(cdemu status | tail -n +3 | cut -d ' ' -f 1)
			test "${prev}" = "load" && devices="${devices} any"
			test "${prev}" = "unload" && devices="${devices} all"
			COMPREPLY=( $(compgen -W "${devices}" -- ${cur}) )
			return 0
			;;
		"-b" | "--bus")
			local busses="session system"
			COMPREPLY=( $(compgen -W "${busses}" -- ${cur}) )
			return 0
			;;
		"--encoding")
			local encodings=$(iconv --list | sed -e 's/\/\/$//')
			COMPREPLY=( $(compgen -W "${encodings}" -- ${cur}) )
			return 0
			;;
        "--dvd-report-css")
            local value="true false"
            COMPREPLY=( $(compgen -W "${value}" -- ${cur}) )
			return 0
			;;
	esac

	case "${prev2}" in
		"load")
			_filedir
			return 0
			;;
	esac

	for word in ${words[@]}; do
		if [ "${word}" = "load" ]; then
			COMPREPLY=( $(compgen -W "${parms}" -- ${cur}) )
			return 0
		fi
	done

	COMPREPLY=( $(compgen -W "${opts} ${cmds}" -- ${cur}) )
	return 0
}
complete -F _cdemu cdemu

