#ifndef _RIVE_AABB_HPP_
#define _RIVE_AABB_HPP_

#include "rive/math/mat2d.hpp"
#include "rive/math/vec2d.hpp"
#include <cstddef>

namespace rive {
    class AABB {
    public:
        union {
            float buffer[4];
            struct {
                float minX, minY, maxX, maxY;
            };
        };

    public:
        AABB();
        AABB(const AABB& copy);
        AABB(float minX, float minY, float maxX, float maxY);

        inline const float* values() const { return buffer; }

        float& operator[](std::size_t idx) { return buffer[idx]; }
        const float& operator[](std::size_t idx) const { return buffer[idx]; }

        static void center(Vec2D& out, const AABB& a);
        static void size(Vec2D& out, const AABB& a);
        static void extents(Vec2D& out, const AABB& a);
        static void combine(AABB& out, const AABB& a, const AABB& b);
        static bool contains(const AABB& a, const AABB& b);
        static bool isValid(const AABB& a);
        static bool testOverlap(const AABB& a, const AABB& b);
        static bool areIdentical(const AABB& a, const AABB& b);
        static void transform(AABB& out, const AABB& a, const Mat2D& matrix);

        float width() const;
        float height() const;
        float perimeter() const;
    };
} // namespace rive
#endif
