from rgbUtils.BaseEffect import BaseEffect
from rgbUtils.debug import debug
import time

class rainbowEffect(BaseEffect):
    name = "rainbowEffect"
    desc = "LED-Band *sollte* rainbowEffect sein"

    def init(self):
        self.i=0
        self.speed = 1
        self.helligkeit = 100

    #loop effect as long as not stopped
    def effect(self):
        debug(self)
        if self.i < 3*255*self.speed:
            c = self.wheel_color(self.i,self.speed)
            #print("r: "+ str(round(c[0]/100*helligkeit,2))+" g: "+str(round(c[1]/100*helligkeit,2))+" b: "+str(round(c[2]/100*helligkeit,2)))
            for rgbStrip in self.effectRGBStrips():
                #print(c[0],c[1],c[2])
                rgbStrip.RGB(c[0],c[1],c[2],self.helligkeit)
            time.sleep(0.01)
            self.i =self.i +1
        else:
            self.i=0
    
    # for overriding by the effect, when a strip is added
    def onRGBStripAdded(self,rgbStrip):
        return
        
    # for overriding by the effect, when a strip is added
    def onEffectParameterValuesUpdated(self):
        return
    
    def wheel_color(self,position,speed = 5):
        """Get color from wheel value (0 - 765)"""
        if position < 0:
            position = 0
        if position > 765*speed:
            position = 765*speed

        if position < (255*speed):
            r = (255*speed) - position % (255*speed)
            g = position % (255*speed)
            b = 0
        elif position < (510*speed):
            g = (255*speed) - position % (255*speed)
            b = position % (255*speed)
            r = 0
        else:
            b = (255*speed) - position % (255*speed)
            r = position % (255*speed)
            g = 0

        return [r/speed, g/speed, b/speed]

    # def wheel_color_2(self,r=255,g=0,b=0):
    #     if r<255:
    #         r=r+1
    #     elif g<255:
    #         g=g+1
    #     elif r=255:

    #     elif b<255:
    #         b=b+1
        