#ifndef GJK_INTERFACE_HPP
#define GJK_INTERFACE_HPP

#include <vector>
#include <Eigen/Dense>

typedef enum {
    COLLISION_RESULT_NO_COLLISION = 0,
    COLLISION_RESULT_COLLISION = 1,
    COLLISION_RESULT_ERROR = -1
} CollisionResultE;

struct OBB {
    Eigen::Vector3d center;       // 中心
    Eigen::Vector3d axis[3];      // 3条正交的棱边方向轴（单位向量）
    double halfExtent[3];  // 沿各轴的半长（从中心到面的距离）
};

namespace gjk_interface {
    bool gjkCollisionJudge(const std::vector<Eigen::Vector3d>& polyA, const std::vector<Eigen::Vector3d>& polyB);
    OBB createOBBFromVertices(const std::vector<Eigen::Vector3d>& vertices,
        const float length, const float width, const float height);
    bool checkOBBCollision(const OBB &obb1, const OBB &obb2);

} // namespace gjk_interface

#endif // GJK_INTERFACE_HPP