from lifxlan import *
from random import randint, betavariate
from time import sleep

def main():
    lan = LifxLAN()
    tilechain_lights = lan.get_tilechain_lights()
    if len(tilechain_lights) != 0:
        t = lan.get_tilechain_lights()[0] #grab the first tilechain
        print("Selected TileChain light: {}".format(t.get_label()))
        original_colors = t.get_tilechain_colors()
        (cols, rows) = t.get_canvas_dimensions()
        hue = 0
        day_colors = []
        for row in range(rows):
            color_row = []
            for col in range(cols):
                color_row.append(get_day_color())
                hue += int(65535.0/(cols*rows))
            day_colors.append(color_row)

        t.project_matrix(day_colors)

        duration_ms = 400

        try:
            while(True):
                proportion_change = 0.2
                sample_size = int((rows * cols) * proportion_change)
                if sample_size % 2 == 1:
                    sample_size = int(sample_size - 1)
                col_samples = [randint(0, cols-1) for i in range(sample_size)]
                row_samples = [randint(0, rows-1) for i in range(sample_size)]
                for i in range(0, sample_size):
                    day_colors[row_samples[i]][col_samples[i]] = get_day_color()
                t.project_matrix(day_colors, duration_ms, rapid=True)
                sleep(max(duration_ms/2000.0, 0.05))
        except KeyboardInterrupt:
            t.set_tilechain_colors(original_colors)
            print("Done.")
    else:
        print("No TileChain lights found.")

def get_day_color():
    #return (int(800 + (5000 * betavariate(0.2, 0.9))), randint(0, 10000), int(65535 * betavariate(0.5, 1)), randint(3500, 5000))
    #return (randint(11739, 30836), randint(0, 10000), int(65535 * betavariate(0.15, 1)), randint(3500, 5000))
    return (randint(11739, 30836), randint(3000, 10000), int(65535 * betavariate(0.15, 1)), randint(3000, 4000))

if __name__=="__main__":
    main()