from collections import namedtuple, ChainMap


rgb = namedtuple('Color', ['R', 'G', 'B'])

# RGB : color mappings
BASIC_COLORS_RGB_TO_NAME = {
    rgb(255, 255, 255): ['white'],
    rgb(0, 0, 0): ['black'],
    rgb(255, 0, 0): ['red'],
    rgb(0, 255, 0): ['lime'],
    rgb(0, 0, 255): ['blue'],
    rgb(255, 255, 0): ['yellow'],
    rgb(0, 255, 255): ['cyan', 'aqua'],
    rgb(255, 0, 255): ['magenta', 'fuchsia'],
    rgb(192, 192, 192): ['silver'],
    rgb(128, 128, 128): ['gray'],
    rgb(128, 0, 0): ['maroon'],
    rgb(128, 128, 0): ['olive'],
    rgb(0, 128, 0): ['green'],
    rgb(128, 0, 128): ['purple'],
    rgb(0, 128, 128): ['teal'],
    rgb(0, 0, 128): ['navy'],

}

FLAT_UI_COLORS_RGB_TO_NAMES = {
    rgb(26, 188, 156): ['turquoise'],
    rgb(46, 204, 113): ['emerland'],
    rgb(52, 152, 219): ['peterriver'],
    rgb(155, 89, 182): ['amethyst'],
    rgb(52, 73, 94): ['wetasphalt'],
    rgb(22, 160, 133): ['greensea'],
    rgb(39, 174, 96): ['nephritis'],
    rgb(41, 128, 185): ['belizehole'],
    rgb(142, 68, 173): ['wisteria'],
    rgb(44, 62, 80): ['midnightblue'],
    rgb(241, 196, 15): ['sunflower'],
    rgb(230, 126, 34): ['carrot'],
    rgb(231, 76, 60): ['alizarin'],
    rgb(236, 240, 241): ['clouds'],
    rgb(149, 165, 166): ['concrete'],
    rgb(243, 156, 18): ['orange'],
    rgb(211, 84, 0): ['pumpkin'],
    rgb(192, 57, 43): ['pomegranate'],
    rgb(189, 195, 199): ['silver'],
    rgb(127, 140, 141): ['asbestos']
}

# color : RGB mappings
BASIC_COLORS = dict(
    (name.lower(), rgb)
    for rgb, names in BASIC_COLORS_RGB_TO_NAME.items()
    for name in names)

FLAT_UI_COLORS = dict(
    (name.lower(), rgb)
    for rgb, names in FLAT_UI_COLORS_RGB_TO_NAMES.items()
    for name in names)

# dictionary of all availabe colors
COLORS = dict(ChainMap(BASIC_COLORS, FLAT_UI_COLORS))
