from typing import Iterable


def word_join(
		iterable: Iterable[str],
		use_repr: bool = False,
		oxford: bool = False,
		delimiter: str = ',',
		connective: str = "and",
		) -> str:
	"""
	Join the given list of strings in a natural manner, with 'and' to join the last two elements.

	:param iterable:
	:param use_repr: Whether to join the ``repr`` of each object.
	:param oxford: Whether to use an oxford comma when joining the last two elements.
	:default oxford: :py:obj:`False`. Always :py:obj:`False` if there are fewer than three elements
	:param delimiter: A single character to use between the words.
	:param connective: The connective to join the final two words with.

	:rtype:

	.. versionchanged:: 0.11.0

		Added ``delimiter`` and ``connective`` arguments.
	"""

	delimiter = f"{delimiter} "

	if use_repr:
		words = [repr(w) for w in iterable]
	else:
		words = list(iterable)

	if len(words) == 0:
		return ''
	elif len(words) == 1:
		return words[0]
	elif len(words) == 2:
		return f" {connective} ".join(words)
	else:
		if oxford:
			return delimiter.join(words[:-1]) + f"{delimiter}{connective} {words[-1]}"
		else:
			return delimiter.join(words[:-1]) + f" {connective} {words[-1]}"