#ifndef CABSTRACTTEXTURE_HPP
#define CABSTRACTTEXTURE_HPP

#define TEXTURE_TYPE_NUMBER 4

/**
 * @brief enum representing every type of texture available.
 */
enum ETextureType {
	TEXTURE_DIFFUSE,
	TEXTURE_SPECULAR,
	TEXTURE_NORMAL,
	TEXTURE_HEIGHT,
};

/**
 * @brief Class representing a texture.
 */
class CAbstractTexture {
private:

	/**
	 * @brief OpenGL ID.
	 */
	unsigned int m_glId;

	/**
	 * @brief The texture's type.
	 */
	ETextureType m_type;

protected:

	/**
	 * @brief Setter to the m_glId member.
	 * @param newId : OpenGL id to set.
	 */
	void setId(unsigned int newId);
public:

	/**
	 * @brief CAbstractTexture's default constructor, disabled.
	 */
	CAbstractTexture(void) = delete;

	/**
	 * @brief CAbstractTexture's constructor.
	 * @param[in] type The texture's type.
	 */
	CAbstractTexture(ETextureType type);

	virtual ~CAbstractTexture() {};

	/**
	 * @brief Getter to the m_glId member.
	 * @return The m_glId member.
	 */
	unsigned int getId(void);

	/**
	 * @brief Getter to the texture's type.
	 * @return The texture's type.
	 */
	ETextureType getType(void);

	/**
	 * @brief Load the texture in the GPU (uses only redefined function in the child classes).
	 */
	virtual void init(void) = 0;
};

#endif