#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);
}