from datetime import datetime


def countdown(target: datetime):
    """
    Calculate time to `target` datetime object from current time when invoked.
    Returns a list containing the string output and tuple of (days, hrs, mins, sec).
    """
    delta = target - datetime.now()
    d = delta.days if delta.days > 0 else 0
    # timedelta only stores seconds so calculate mins and hours by dividing remainder
    h, rem = divmod(delta.seconds, 3600)
    m, s = divmod(rem, 60)
    # text representation
    stringify = (
        f"{int(d)} {'days' if d is not 1 else 'day'}, "
        f"{int(h)} {'hours' if h is not 1 else 'hour'}, "
        f"{int(m)} {'minutes' if m is not 1 else 'minute'}, "
        f"{int(s)} {'seconds' if s is not 1 else 'second'} "
    )
    return [stringify, (d, h, m, s)]