"""Formatea un datetime a ISO 8601 UTC con milisegundos."""

from datetime import datetime, timezone


def format_iso8601(dt: datetime) -> str:
    """Formatea un datetime a ISO 8601 UTC con milisegundos.

    Formato de salida: ``yyyy-MM-ddTHH:mm:ss.SSSZ``

    Si el datetime es naive (sin tzinfo), se asume UTC.
    Si el datetime es aware, se convierte a UTC antes de formatear.

    Args:
        dt: datetime a formatear. Puede ser naive o aware.

    Returns:
        String ISO 8601 en UTC con milisegundos, terminando en 'Z'.
    """
    if dt.tzinfo is None:
        dt = dt.replace(tzinfo=timezone.utc)
    else:
        dt = dt.astimezone(timezone.utc)
    return dt.isoformat(timespec="milliseconds").replace("+00:00", "Z")
