#pragma once

#include <BAN/Vector.h>
#include <BAN/UniqPtr.h>

class Image
{
public:
	struct Color
	{
		uint8_t r;
		uint8_t g;
		uint8_t b;
		uint8_t a;
	};

public:
	static BAN::UniqPtr<Image> load_from_file(BAN::StringView path);

	uint64_t width() const { return m_width; }
	uint64_t height() const { return m_height; }

	bool render_to_framebuffer();

private:
	Image(uint64_t width, uint64_t height, BAN::Vector<Color>&& bitmap)
		: m_width(width)
		, m_height(height)
		, m_bitmap(BAN::move(bitmap))
	{ }

private:
	const uint64_t m_width;
	const uint64_t m_height;
	const BAN::Vector<Color> m_bitmap;

	friend class BAN::UniqPtr<Image>;
};