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