#compdef zoneadm zonecfg zlogin

_zones () {
	case "$service" in
		zoneadm)	_zoneadm "$@";;
		zonecfg) _zonecfg "$@";;
		zlogin) _zlogin "$@";;
		*) _message "Unknow service $service";;
	esac
}

_zlogin () {
	local -a zones
	zones=($(zonelist))
	_arguments \
		'-l[username]:username:_users' \
		'-C[console login]' \
		'-S[safe login]' \
		'-E[disable escape sequence character]' \
		'*:zone:($zones)' && return
}

_zoneadm () {
	local -a zones
	zones=($(zonelist))
	_arguments \
		'-z[zone]:zone:($zones)' \
		'*:command:(boot halt install list ready uninstall verify reboot)' && return
}

_zonecfg () {
	local -a zones
	zones=($(zonelist))
	_arguments \
		'-z[zone]:zone:($zones)' \
		'-f[command file]:file:_files' && return
}

zonelist () {
	local -a zones

	# Fetch zone lists from /etc/zones/index
	zones=(${${(a)"${(f)$(< /etc/zones/index)}"##\#*}//:*}) #" prevent vim become crazy

	# Remove global zone from list "
	zones[(r)global]=''

	echo -n $zones
}

return 1