from operator import itemgetter

__all__ = ('chart_colors', 'highlight_colors', 'get_pie_chart', 'get_bar_chart')


chart_colors = [0x3366CC, 0xDC3912, 0xFF9900, 0x109618, 0x990099, 0x3B3EAC, 0x0099C6, 0xDD4477, 0x66AA00, 0xB82E2E,
                0x316395, 0x994499, 0x22AA99, 0xAAAA11, 0x6633CC, 0xE67300, 0x8B0707, 0x329262, 0x5574A6, 0x3B3EAC]


highlight_colors = []


def _highlight_colors():
    for color in chart_colors:
        r, g, b = color >> 16, (color >> 8) & 0xFF, color & 0xFF
        highlight_colors.append('#%02X%02X%02X' % (min(int(r * 1.2), 255),
                                                   min(int(g * 1.2), 255),
                                                   min(int(b * 1.2), 255)))


_highlight_colors()


chart_colors = list(map('#%06X'.__mod__, chart_colors))


def get_pie_chart(data):
    return {
        'labels': list(map(itemgetter(0), data)),
        'datasets': [
            {
                'backgroundColor': chart_colors,
                'highlightBackgroundColor': highlight_colors,
                'data': list(map(itemgetter(1), data)),
            },
        ],
    }


def get_bar_chart(data, **kwargs):
    return {
        'labels': list(map(itemgetter(0), data)),
        'datasets': [
            {
                'backgroundColor': kwargs.get('fillColor', 'rgba(151,187,205,0.5)'),
                'borderColor': kwargs.get('strokeColor', 'rgba(151,187,205,0.8)'),
                'borderWidth': 1,
                'hoverBackgroundColor': kwargs.get('highlightFill', 'rgba(151,187,205,0.75)'),
                'hoverBorderColor': kwargs.get('highlightStroke', 'rgba(151,187,205,1)'),
                'data': list(map(itemgetter(1), data)),
            },
        ],
    }

def get_histogram(data, **kwargs):
    return {
        'labels': [round(i, 1) for i in list(map(itemgetter(0), data))],
        'datasets': [
            {
                'backgroundColor': kwargs.get('fillColor', 'rgba(151,187,205,0.5)'),
                'borderColor': kwargs.get('strokeColor', 'rgba(151,187,205,0.8)'),
                'borderWidth': 1,
                'hoverBackgroundColor': kwargs.get('highlightFill', 'rgba(151,187,205,0.75)'),
                'hoverBorderColor': kwargs.get('highlightStroke', 'rgba(151,187,205,1)'),
                'data': list(map(itemgetter(1), data)),
            },
        ],
    }