```python
def oxford_join(names: list) -> str:
    if len(names) == 0:
        return ""
    
    if len(names) == 1:
        return names[0]
    
    joined_names = names[:-1]
    last_name = names[-1]
    
    if len(joined_names) == 0:
        return last_name
    
    joined_names_str = ", ".join(joined_names)
    
    if len(joined_names) >= 2:
        return f"{joined_names_str} and {last_name}"
    
    return joined_names_str
```