#pragma once

/*
цвета               R G B
красный             ff0000
зелёный             00ff00
синий               0000ff
сиреневый           ff00ff - magenta
жёлтый              ffff00
голубой             00ffff - cyan
белый               ffffff
тёмно-красный       aa0000
красно-коричневый   700000
салатовый           aaff00
светло-зелёный      55ff00
фиолетовый          aa00ff
фиолетово-синий     7000ff
старшие 8 бит - альфа-канал, на всякий случай
по таблице Kisser'a, по его сведениям, красный это 100%, тёмно-красный - 33% красного, красно-коричневый - 66% красного
Для уточнения палитры использовались изображения, предоставленные TheGWBV
*/

constexpr auto Color_Black      = 0xff000000;
constexpr auto Color_Red        = 0xffff0000;
constexpr auto Color_Green      = 0xff00ff00;
constexpr auto Color_Blue       = 0xff0000ff;
constexpr auto Color_Yellow     = 0xffffff00;
constexpr auto Color_Cyan       = 0xff00ffff;
constexpr auto Color_Magenta    = 0xffff00ff;
constexpr auto Color_DarkRed    = 0xffaa0000;
constexpr auto Color_RedBrown   = 0xff700000;
constexpr auto Color_Violet     = 0xffaa00ff;
constexpr auto Color_VioletBlue = 0xff7000ff;
constexpr auto Color_LightGreen = 0xff55ff00;
constexpr auto Color_Salatovyi  = 0xffaaff00;
constexpr auto Color_White      = 0xffffffff;

// константные стандартные палитры
extern const std::array<std::array<uint32_t, 4>, 16> g_pColorPalettes_std;
extern const std::array<std::array<uint32_t, 4>, 2> g_pMonochromePalette_std;
extern const std::array<std::array<uint32_t, 4>, 8> g_pAdaptMonochromePalette_std;

// переменные текущие палитры, которые можно переопределять
extern std::array<std::array<uint32_t, 4>, 16> g_pColorPalettes;
extern std::array<std::array<uint32_t, 4>, 2> g_pMonochromePalette;
extern std::array<std::array<uint32_t, 4>, 8> g_pAdaptMonochromePalette;

std::wstring ColorToStr(const DWORD col);
std::wstring PaletteToStr(const std::span<const uint32_t> pal);
void StrToPalette(const std::wstring &strPal, std::span<uint32_t> pal);

