#compdef wl-copy

__xdg_mimetypes() {
	local expl SEARCH=${XDG_DATA_HOME:-$HOME/.local/share}
	SEARCH+=:${XDG_DATA_DIRS:-/usr/share:/usr/local/share}

	local -a _all_mimetypes
	for dir in ${(s.:.)SEARCH}; do
		[[ -f "${dir}/mime/types" ]] &&
		_all_mimetypes+=(${(f)"$(<"${dir}/mime/types")"})
	done

	_wanted mimetypes expl 'mimetypes' _multi_parts / _all_mimetypes
}

__all_seats() {
	local -a seats
	if (( $+commands[weston-info] && $+commands[sed] )); then
		seats=( ${(@f)"$(weston-info 2>/dev/null | sed -n '/wl_seat/{n;s/\s*name: //;p}')"} )
	elif (( $+commands[loginctl] )); then
		seats=( ${(@f)"$(loginctl --no-legend --no-pager list-seats 2>/dev/null)"} )
	fi

	if [[ -z $seats ]]; then
		# seat0 is always a valid seat and covers most cases, so it's a good fallback.
		compadd "$@" - seat0
	else
		compadd "$@" -a seats
	fi
}

_arguments -S -s \
	{-o,--paste-once}'[Only serve one paste request and then exit]' \
	{-f,--foreground}'[Stay in the foreground instead of forking]' \
	{-c,--clear}'[Instead of copying anything, clear the clipboard]' \
	{-p,--primary}'[Use the "primary" clipboard]' \
	{-n,--trim-newline}'[Do not copy the trailing newline character]' \
	{-t+,--type=}'[Override the inferred MIME type for the content]:mimetype:__xdg_mimetypes' \
	{-s+,--seat=}'[Pick the seat to work with]:seat:__all_seats' \
	{-v,--version}'[Display version info]' \
	{-h,--help}'[Display a help message]' \
	'*::text'
