#pragma once

#include "render/OpenGlExtensions.h"
#include "utils/Utils.h"

#if defined EMSCRIPTEN || defined __ANDROID__
#define PNG_ENABLED
#endif

namespace ZL
{

	struct TextureDataStruct {
		size_t width;
		size_t height;
		std::vector<char> data;

		enum Format {
			R8,   // Для шрифтов (GL_RED)
			RGB,  // BS_24BIT
			RGBA  // BS_32BIT
		};
		

		enum MipmapType {
			NONE,    
			GENERATE   
		};

		Format format = RGBA;
		MipmapType mipmap = GENERATE;
	};
	class Texture
	{
		size_t width = 0;
		size_t height = 0;
		GLuint texID = 0;

	public:

		Texture(const TextureDataStruct& texData);

		//Cubemap texture:
		Texture(const std::array<TextureDataStruct, 6>& texDataArray);

		~Texture();

		GLuint getTexID();

		size_t getWidth();
		size_t getHeight();


	};

	TextureDataStruct CreateTextureDataFromBmp24(const std::string& fullFileName, const std::string& ZIPFileName="");
	TextureDataStruct CreateTextureDataFromBmp32(const std::string& fullFileName, const std::string& ZIPFileName="");
#ifdef PNG_ENABLED
	TextureDataStruct CreateTextureDataFromPng(const std::string& fullFileName, const std::string& ZIPFileName = "");
#endif


}
