#!/usr/bin/python3
from datetime import datetime as dt
from sys import stdout, stderr
from typing import Union


def log(
    message: str,
    origin: str = "Unknown",
    level: str = "LOG",
    time: Union[dt, str] = "now",
) -> None:
    if level in ["EXIT", "CRASH", "FATAL", "ERROR"]:
        stream = stderr
    else:
        stream = stdout
    if time == "now":
        dtime = dt.now()
    elif type(time) == str:
        raise ValueError('Only "now" is an accepted string argument for time')
    elif type(time) == dt:
        dtime = time
    else:
        raise ValueError("time must either be a string or a dt object")
    time = dtime.strftime("%H:%M:%S")
    if not "\n" in message:
        print(f"[{level}][{origin}][{time}] {message}", file=stream)
    else:
        for line in message.split("\n"):
            print(f"[{level}][{origin}][{time}] {line}", file=stream)