"""Expande un bounding box con un margen proporcional."""


def extent_with_padding(
    bounds: tuple[float, float, float, float],
    pad_ratio: float = 0.05,
) -> tuple[float, float, float, float]:
    """Retorna un extent expandido con padding proporcional al tamano del bbox.

    El orden de salida es (minx, maxx, miny, maxy), conveniente para ejes de matplotlib.

    Args:
        bounds: tupla (minx, miny, maxx, maxy) del bounding box original.
        pad_ratio: fraccion del ancho/alto a anadir como margen por cada lado (por defecto 0.05).

    Returns:
        Tupla (minx - padx, maxx + padx, miny - pady, maxy + pady).
    """
    minx, miny, maxx, maxy = bounds
    pad_x = (maxx - minx) * pad_ratio
    pad_y = (maxy - miny) * pad_ratio
    return (minx - pad_x, maxx + pad_x, miny - pad_y, maxy + pad_y)
