use crossterm::style::Color;
pub const COLORS: [(&str, Color); 16] =
[
("black", Color::Black),
("dark_red", Color::DarkRed),
("dark_green", Color::DarkGreen),
("dark_yellow", Color::DarkYellow),
("dark_blue", Color::DarkBlue),
("dark_magenta", Color::DarkMagenta),
("dark_cyan", Color::DarkCyan),
("grey", Color::Grey),
("dark_grey", Color::DarkGrey),
("red", Color::Red),
("green", Color::Green),
("yellow", Color::Yellow),
("blue", Color::Blue),
("magenta", Color::Magenta),
("cyan", Color::Cyan),
("white", Color::White),
];
const BRIGHT: usize = 8;
pub fn color_to_u8(color: &Color) -> u8 {
COLORS.iter().position(|(_, c)| c == color).map_or(255, |i| i as u8) }
pub fn u8_to_color(val: u8) -> Option<Color> {
COLORS.get(val as usize).map(|(_, color)| *color)
}
pub fn by_name(name: &str) -> Option<Color> {
COLORS.iter().find(|(n, _)| n.eq_ignore_ascii_case(name)).map(|(_, color)| *color)
}
pub fn offered() -> Vec<&'static str>
{
let mut names = COLORS.iter().skip(BRIGHT).map(|(name, _)| *name).collect::<Vec<&'static str>>();
let mut dark = COLORS.iter().take(BRIGHT).map(|(name, _)| *name).collect::<Vec<&'static str>>();
names.sort_unstable();
dark.sort_unstable();
names.extend(dark);
names
}