#!/usr/bin/python3
import RPi.GPIO as GPIO
import time
import pygame
import random

# add cheat prevention - subtract points, make sure not < 0
# extensions: use 3 buttons and 3 lights!
# add cheat prevention
# add messages such as great, good, ... for success
# add message in case you didnt get it - "keep trying" etc
# make max wait time variable!
# give only 30 tries
# decrease time span
# add sound!
# add a nice display of the score!
# use lists instead of button1, led1, etc.


led1 = 26
led2 = 19
led3 = 13 

button1 = 21
button2 = 16
button3 = 12

wait_time = 0.3

def setup():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(led1, GPIO.OUT)
    GPIO.setup(led2, GPIO.OUT)
    GPIO.setup(led3, GPIO.OUT)
    GPIO.setup(button1, GPIO.IN)
    GPIO.setup(button2, GPIO.IN)
    GPIO.setup(button3, GPIO.IN)

def led_on(led_pin):
    GPIO.output(led_pin, GPIO.HIGH)

def led_off(led_pin):
    GPIO.output(led_pin, GPIO.LOW)

def all_off(effects):
    for effect in effects:
        effect.stop()

def main():
    setup()
    try:
        points = 0 
        while True:
            
            print("Points: ", points) 

            wait = random.randint(30,5000)
            time.sleep(wait/1000)
            led = led1
            led_on(led)

            # cheat detection - button already pressed?
            if GPIO.input(button1) == GPIO.LOW:
                print("YOU CHEATER!!")
                points = max(0, points-5) 
                led_on(led2)
                time.sleep(1)
                led_off(led1)
                led_off(led2)
                continue
            
            ts = time.clock()

            while time.clock() - ts < wait_time : 
                if GPIO.input(button1) == GPIO.LOW:
                    print(random.choice(["Great!", "Nice", "Very Good!", "You Rock!"]))
                    led_on(led3)
                    time.sleep(1)
                    led_off(led3)
                    points += 1
                    break

            led_off(led1)

    finally:
        led_off(led1)
        led_off(led2)
        led_off(led3)
        GPIO.cleanup()

main()



