#pragma once

#include "AntiAliasTable.h"
#include "RGBAColor.h"

namespace PortabilityLayer
{
	struct AntiAliasTable;

	class StandardPalette
	{
	public:
		static const unsigned int kSize = 256;

		StandardPalette();

		const RGBAColor *GetColors() const;
		static uint8_t MapColorAnalyticTruncated(unsigned int r, unsigned int g, unsigned int b);
		static uint8_t MapColorAnalytic(uint8_t r, uint8_t g, uint8_t b);
		static uint8_t MapColorAnalytic(const RGBAColor &color);
		uint8_t MapColorLUT(uint8_t r, uint8_t g, uint8_t b) const;
		uint8_t MapColorLUT(const RGBAColor &color) const;
		const AntiAliasTable &GetWhiteAATable() const;
		const AntiAliasTable &GetBlackAATable() const;

		static const StandardPalette *GetInstance();

	private:
		static StandardPalette ms_instance;

		RGBAColor m_colors[kSize];
		AntiAliasTable m_whiteAATable;
		AntiAliasTable m_blackAATable;
		uint8_t m_lut[16 * 16 * 16];
	};
}
