#compdef abra

_abra () {
	local context state line curcontext="$curcontext" ret=1
	_arguments -n : \
		{-h,--help}'[Help message]' \
		'1:commands:(app server)' \
		'*::arguments:->arguments' \
		&& ret=0

	case $state in
		(arguments)
			curcontext="${curcontext%:*:*}:abra-arguments-$words[1]:"
			case $words[1] in
				(app)
					_arguments \
						'1: :_abra_apps' \
					&& ret=0
				;;
				(server)
					_arguments \
						'1:servers:_abra_servers' \
					&& ret=0
				;;
			esac
		;;
	esac

	return ret
}

_abra_servers() {
	_path_files -/W $HOME/.abra/servers
}

_abra_apps()
{
	local newapps apps=($HOME/.abra/servers/*/*.env)
	typeset -a apps
	newapps=()
	for app in $apps; do
		newapps+=($(_abra_basename "${app}"))
	done
	_describe -t apps 'app' newapps
}

_abra_basename()
{
    printf -- "${1##*/}"
}

_abra "$@"