#pragma once

#include "vertex.hpp"
#include <glm/matrix.hpp>

namespace Graphics {
	template <int VERTICES, int INDICES>
	struct Primitive {
		Vertex m_vertices[VERTICES];
		unsigned int m_indices[INDICES];

		constexpr Primitive with_colour(glm::vec4 colour) const {
			Primitive p = *this;
			for(Vertex& v : p.m_vertices) {
				v.m_colour = colour;
			}
			return p;
		}

		constexpr Primitive with_matrix(glm::mat4 mat) const {
			Primitive p = *this;
			for(Vertex& v : p.m_vertices) {
				v.m_pos = mat * v.m_pos;
			}
			return p;
		}

		constexpr Primitive with_translation(glm::vec3 vec) const {
			Primitive p = *this;
			for(Vertex& v : p.m_vertices) {
				v.m_pos += glm::vec4(vec, 0);
			}
			return p;
		}
	};
};