#include "rive/shapes/ellipse.hpp"
#include "rive/component_dirt.hpp"
#include "rive/math/circle_constant.hpp"

using namespace rive;

Ellipse::Ellipse() {
    addVertex(&m_Vertex1);
    addVertex(&m_Vertex2);
    addVertex(&m_Vertex3);
    addVertex(&m_Vertex4);
}

void Ellipse::update(ComponentDirt value) {
    if (hasDirt(value, ComponentDirt::Path)) {
        auto radiusX = width() / 2.0f;
        auto radiusY = height() / 2.0f;

        auto ox = -originX() * width() + radiusX;
        auto oy = -originY() * height() + radiusY;

        m_Vertex1.x(ox);
        m_Vertex1.y(oy - radiusY);
        m_Vertex1.inPoint(Vec2D(ox - radiusX * circleConstant, oy - radiusY));
        m_Vertex1.outPoint(Vec2D(ox + radiusX * circleConstant, oy - radiusY));

        m_Vertex2.x(ox + radiusX);
        m_Vertex2.y(oy);
        m_Vertex2.inPoint(Vec2D(ox + radiusX, oy + circleConstant * -radiusY));
        m_Vertex2.outPoint(Vec2D(ox + radiusX, oy + circleConstant * radiusY));

        m_Vertex3.x(ox);
        m_Vertex3.y(oy + radiusY);
        m_Vertex3.inPoint(Vec2D(ox + radiusX * circleConstant, oy + radiusY));
        m_Vertex3.outPoint(Vec2D(ox - radiusX * circleConstant, oy + radiusY));

        m_Vertex4.x(ox - radiusX);
        m_Vertex4.y(oy);
        m_Vertex4.inPoint(Vec2D(ox - radiusX, oy + radiusY * circleConstant));
        m_Vertex4.outPoint(Vec2D(ox - radiusX, oy - radiusY * circleConstant));
    }

    Super::update(value);
}