use std::io;
use std::io::Write;
use ansistream::FC_DARK_GRAY;
fn hex2rgb(hex: u32) -> (u16, u16, u16) {
let r = (hex >> 16) as u16;
let g = ((hex >> 8) & 0xff) as u16;
let b = (hex & 0xff) as u16;
(r, g, b)
}
fn main() -> io::Result<()> {
let mut astream = ansistream::AnsiEscapeStream::new(io::stdout().lock());
let palettes: [u32; 50] = [
0xf1c15d, 0x85a746, 0x599a70, 0xe56a4b, 0xeda052, 0xb3d9e2, 0xb3b4ac, 0xfefacb, 0x78495d,
0x93667a, 0x36473d, 0x778c63, 0xe8df7a, 0xe6a91b, 0xea9804, 0x242623, 0x7d603e, 0xdfd1a4,
0x5e7e4f, 0xc74223, 0x4b9d8e, 0x85cd9f, 0xa4deab, 0xc9e8c9, 0xfff7c9, 0xfff7c9, 0xfff7c9,
0xffca3d, 0xffffff, 0xb80000, 0x8f3631, 0xb9512f, 0xc96c36, 0xaa883f, 0x3b4648, 0xfeed01,
0xff9b0d, 0xff4732, 0xfc3f5c, 0x935ca4, 0xe2e1e9, 0xcdc9d0, 0xa5aabe, 0x5f6273, 0xf00806,
0x9e3740, 0xf3d99e, 0xb1b88c, 0x55887f, 0x2b2e37,
];
astream.write_string("Printing a common brazilian color palette:\n\n")?;
for (idx, &c) in palettes.iter().enumerate() {
if idx % 5 == 0 {
astream.write_string("\t")?;
}
if idx % 10 == 0 {
writeln!(&mut *astream)?;
}
astream.write_attribute(FC_DARK_GRAY)?;
let (r, g, b) = hex2rgb(c);
astream.write_text_bcrgb_fmt(r, g, b, format_args!(" {c:#06x} "))?;
}
astream.reset_all_attributes()?;
Ok(())
}