#include "rive/math/aabb.hpp"
#include <algorithm>
#include <cmath>

using namespace rive;

AABB::AABB(Span<Vec2D> pts) {
    if (pts.size() == 0) {
        minX = minY = maxX = maxY = 0;
        return;
    }

    float L = pts[0].x(), R = L, T = pts[0].y(), B = T;

    for (size_t i = 1; i < pts.size(); ++i) {
        L = std::min(L, pts[i].x());
        R = std::max(R, pts[i].x());
        T = std::min(T, pts[i].y());
        B = std::max(B, pts[i].y());
    }
    minX = L;
    maxX = R;
    minY = T;
    maxY = B;
}

static inline float graphics_roundf(float x) { return std::floor(x + 0.5f); }

static inline int graphics_round(float x) { return (int)graphics_roundf(x); }

IAABB AABB::round() const {
    return {
        graphics_round(left()),
        graphics_round(top()),
        graphics_round(right()),
        graphics_round(bottom()),
    };
}
