local gl = honey.gl

local module = {}
setmetatable(module, {__index=_G})
setfenv(1, module)

function Image(filename, params)
	local params = params or {}
	local data, width, height = honey.image.load(filename, 4)
	local self = {}
	self.width = width
	self.height = height

	self.texture = gl.GenTextures()
	gl.BindTexture(gl.TEXTURE_2D, self.texture)
	for param, value in pairs(params) do
		gl.TexParameteri(gl.TEXTURE_2D, gl[param], value)
	end
	gl.TexImage2D(
		gl.TEXTURE_2D, 0,
		gl.RGBA, width, height,
		gl.RGBA, gl.UNSIGNED_BYTE, data
	)
	gl.GenerateMipmap(gl.TEXTURE_2D)
	honey.image.destroy(data)

	self.__gc = honey.util.gc_canary(function()
		gl.DeleteTextures(self.texture)
	end)

	return self
end


local cache = {}
function loadImage(filename, params)
	if not cache[filename] then
		local img = Image(filename, params)
		cache[filename] = img
		return img
	end

	return cache[filename]
end

function clearImageCache()
	cache = {}
end

return module