```python
def oxford_join(names: list) -> str:
    if not names:
        return ""

    if len(names) == 1:
        return names[0]

    if len(names) == 2:
        return " and ".join(names)

    return ", and ".join(names[:-1]) + f", {names[-1]}"
```