/*
 * Class for the mesh of a model
 */

#pragma once

#ifndef MESH_H
#define MESH_H

#include "common.hpp"

#include <sstream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <set>
#include <map>


class Mesh
{
public:
	Mesh(); //default constructor
	//constructor that gets all the important information for the mesh
	Mesh(float* _vertexPositions, float* _normals, float* _textureCoordinates, GLuint* _indices, int _indicesArraySize, int _arraySize, float* _tangents, float* _dimension);
	~Mesh();	//deconstructor

	GLuint getIndicesCount(); //get the size of the indices array
	int getElementCount();	//get the number of elements in the texture, normal, vertex arrays
	float* getVertices();	//get the array with the vertex positions
	float* getNormals();	//get the array with the normal positions
	float* getTextureCoordinates();	//get the array with the texture coordinates
	float* getTangents(); //get the array with the tangents information
	GLuint* getIndices(); //get the indices array
	float* getDim();		//get the array with the dimension information
	glm::vec3 getDimVec() const;


private:
	float* vertexPositions;	//vertex positions
	float* normals;	//normal positions
	float* textureCoordinates;	//texture coordinates
	float* tangents;	//tangents at the vertex positions
	float* dimension;//dimension of the mesh - in order x,y,z,w
	int elementcount;	//size of the vertex, normal, texture arrays
	GLuint* indices;	//indices array
	int indicesArraySize;	//size of the indices array


};
#endif