"""Calculo del bounding box (minx, miny, maxx, maxy) de un poligono."""


def polygon_bbox(polygon: list[list[tuple[float, float]]]) -> tuple[float, float, float, float]:
    """Calcula el bounding box que envuelve todos los anillos del poligono.

    Args:
        polygon: lista de anillos [(lon, lat), ...]; puede tener varios anillos (exterior + holes).

    Returns:
        Tupla (minx, miny, maxx, maxy) con las coordenadas extremas del poligono.
    """
    xs = [pt[0] for ring in polygon for pt in ring]
    ys = [pt[1] for ring in polygon for pt in ring]
    return min(xs), min(ys), max(xs), max(ys)
