#ifndef XNA_GRAPHICS_VERTEXPOSITION_HPP
#define XNA_GRAPHICS_VERTEXPOSITION_HPP

#include "../common/numerics.hpp"
#include "../common/color.hpp"
#include "../default.hpp"

namespace xna {
	struct VertexPositionColor {
		Vector3 position{};
		Color color{};

		constexpr VertexPositionColor() = default;			
		constexpr VertexPositionColor(Vector3 const& position, Color const& color):
			position(position), color(color){}

		constexpr bool operator==(const VertexPositionColor& other) const {
			return position == other.position && color == other.color;
		}
	};

	struct VertexPositionTexture {
		Vector3 position{};
		Vector2 textureCoordinate{};

		constexpr VertexPositionTexture() = default;		

		constexpr bool operator==(const VertexPositionTexture& other) const {
			return position == other.position 
				&& textureCoordinate == other.textureCoordinate;
		}

		constexpr VertexPositionTexture(const Vector3& position, const Vector2& textureCoordinate)
			: position(position), textureCoordinate(textureCoordinate)
		{
		}
	};

	struct VertexPositionColorTexture {
		Vector3 position{};
		Vector2 textureCoodinate{};
		Color color{};

		constexpr VertexPositionColorTexture() = default;

		constexpr bool operator==(const VertexPositionColorTexture& other) const {
			return position == other.position 
				&& textureCoodinate == other.textureCoodinate 
				&& color == other.color;
		}

		constexpr VertexPositionColorTexture(const Vector3& position, const Vector2& textureCoodinate, const Color& color)
			: position(position), textureCoodinate(textureCoodinate), color(color)
		{
		}
	};

	struct VertexPositionNormalTexture {
		Vector3 position{};
		Vector3 normal{};
		Vector2 textureCoodinate{};

		constexpr VertexPositionNormalTexture() = default;		

		bool operator==(const VertexPositionNormalTexture& other) const	{
			return position == other.position 
				&& normal == other.normal 
				&& textureCoodinate == other.textureCoodinate;
		}

		constexpr VertexPositionNormalTexture(const Vector3& position, const Vector3& normal, const Vector2& textureCoodinate)
			: position(position), normal(normal), textureCoodinate(textureCoodinate)
		{
		}
	};
}

#endif