"""
`rainbowio` - Provides the `colorwheel()` function
===========================================================
See `CircuitPython:rainbowio` in CircuitPython for more details.
Not supported by all boards.

* Author(s): Kattni Rembor, Carter Nelson
"""


def colorwheel(color_value):
    """
    A colorwheel. ``0`` and ``255`` are red, ``85`` is green, and ``170`` is blue, with the values
    between being the rest of the rainbow.

    :param int color_value: 0-255 of color value to return
    :return: tuple of RGB values
    """
    color_value = int(color_value)
    if color_value < 0 or color_value > 255:
        r = 0
        g = 0
        b = 0
    elif color_value < 85:
        r = int(255 - color_value * 3)
        g = int(color_value * 3)
        b = 0
    elif color_value < 170:
        color_value -= 85
        r = 0
        g = int(255 - color_value * 3)
        b = int(color_value * 3)
    else:
        color_value -= 170
        r = int(color_value * 3)
        g = 0
        b = int(255 - color_value * 3)
    return r << 16 | g << 8 | b
