#include "rive/shapes/polygon.hpp"
#include "rive/shapes/star.hpp"
#include "rive/shapes/straight_vertex.hpp"
#include <cmath>

using namespace rive;

Polygon::Polygon() {}

Polygon::~Polygon() {}

void Polygon::cornerRadiusChanged() { markPathDirty(); }

void Polygon::pointsChanged() { markPathDirty(); }

std::size_t Polygon::vertexCount() { return points(); }

void Polygon::buildPolygon()
{
	auto halfWidth = width() / 2;
	auto halfHeight = height() / 2;

	auto ox = -originX() * width() + halfWidth;
	auto oy = -originY() * height() + halfHeight;

	auto angle = -M_PI / 2;
	auto inc = 2 * M_PI / points();

	for (StraightVertex& vertex : m_PolygonVertices)
	{
		vertex.x(ox + cos(angle) * halfWidth);
		vertex.y(oy + sin(angle) * halfHeight);
		vertex.radius(cornerRadius());
		angle += inc;
	}
}

void Polygon::update(ComponentDirt value)
{
	if (hasDirt(value, ComponentDirt::Path))
	{
		if (m_PolygonVertices.size() != vertexCount())
		{
			m_PolygonVertices.resize(vertexCount());
			m_Vertices.clear();
			for (StraightVertex& vertex : m_PolygonVertices)
			{
				m_Vertices.push_back(&vertex);
			}
		}
		buildPolygon();
	}
	Super::update(value);
}
