import random
import sys
import time

import RPIO

outputs = [23, 24, 25, 8, 7]

def main():
	# Use the BCM addressing scheme
	RPIO.setmode(RPIO.BCM)

	# Setup all five outputs
	for RPIO in outputs:
		RPIO.setup(RPIO, RPIO.OUT)
		RPIO.output(RPIO, False)

	while True:
		cylon()
	randomize()

	turn_on_top_down()
	turn_off_top_down()
	turn_on_bottom_up()
	turn_off_bottom_up()


def turn_on_top_down():
	for RPIO in outputs:
		RPIO.output(RPIO, True)
		time.sleep(.25)

def turn_on_bottom_up():
	for RPIO in reversed(outputs):
		RPIO.output(RPIO, True)
		time.sleep(.25)

def turn_off_top_down():
	for RPIO in outputs:
		RPIO.output(RPIO, False)
		time.sleep(.25)

def turn_off_bottom_up():
	for RPIO in reversed(outputs):
		RPIO.output(RPIO, False)
		time.sleep(.25)

def cylon():
	for RPIO in outputs[:-1]:
		RPIO.output(RPIO, True)
		time.sleep(.08)
		RPIO.output(RPIO, False)

	for RPIO in outputs[::-1][:-1]:
		RPIO.output(RPIO, True)
		time.sleep(.08)
		RPIO.output(RPIO, False)

def randomize():
	rand_val = random.randint(0, 31)
	# LED1 - RPIO23
	if rand_val & 0b00001:
		RPIO.output(23, True)
	else:
		RPIO.output(23, False)
	# LED2 - RPIO24
	if rand_val & 0b00010:
		RPIO.output(24, True)
	else:
		RPIO.output(24, False)
	# LED3 - RPIO25
	if rand_val & 0b00100:
		RPIO.output(25, True)
	else:
		RPIO.output(25, False)
	# LED4 - RPIO8
	if rand_val & 0b01000:
		RPIO.output(8, True)
	else:
		RPIO.output(8, False)
	# LED5 - RPIO7
	if rand_val & 0b10000:
		RPIO.output(7, True)
	else:
		RPIO.output(7, False)
	time.sleep(0.1)


if __name__ == '__main__':
	sys.exit(main())