### Clinckity Clank v.1.2
### By Acmecorporation
### watch video on Youtube channel: http://www.youtube.com/user/Bimbocinese

# GrovePi + Grove Button
# http://www.seeedstudio.com/wiki/Grove_-_Button

import datetime
from datetime import date
from grove_rgb_lcd import *
import time
import grovepi
import RPi.GPIO as GPIO
from time import sleep
import os

# The script as below using BCM GPIO 00..nn numbers
GPIO.setmode(GPIO.BCM)

# Set relay pins as output
GPIO.setup(22, GPIO.OUT)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(17, GPIO.IN)

GPIO.output(22, GPIO.HIGH)
GPIO.output(27, GPIO.HIGH)

# Connect the Grove Button to digital port D3
# SIG,NC,VCC,GND
button = 3
buzzer = 8
sensor = 1 # connect rotary sensor to A1
redled = 5
greenled = 6

grovepi.pinMode(button,"INPUT")
grovepi.pinMode(buzzer,"OUTPUT")
grovepi.pinMode(sensor,"INPUT")
grovepi.pinMode(redled,"OUTPUT")
grovepi.pinMode(greenled,"OUTPUT")

def buzz():
    for c in range (1,3):
    	grovepi.digitalWrite(buzzer,1)
	grovepi.digitalWrite(greenled,0)
	grovepi.digitalWrite(redled,1)
    	time.sleep(.1)
    	grovepi.digitalWrite(buzzer,0)
	grovepi.digitalWrite(greenled,1)
	grovepi.digitalWrite(redled,0)
	time.sleep(.3)

def restart_program():
	python = sys.executable
	os.execl(python, python, * sys.argv)

def restart_deleting():
	if input_value ==1 and grovepi.analogRead(sensor) >= 1000:
		os.remove("/home/pi/te.txt")
		os.remove("/home/pi/stat.txt")
                os.remove("/home/pi/te1.txt")
                restart_program()
	

filedati1="/home/pi/te.txt"
filedati2="/home/pi/te1.txt"	

grovepi.digitalWrite(greenled,0)
grovepi.digitalWrite(redled,0)

if not os.path.isfile(filedati1) or not os.path.isfile(filedati2):
	grovepi.digitalWrite(redled,1)
	print "NOT FOUND"	
	setRGB(20,20,255)
	setText("  SET DAYS  ")
	time.sleep(2)
	while True:
		try:
			grovepi.digitalWrite(redled,0)
			sensor_value = grovepi.analogRead(sensor) / 12
			time.sleep(.2)
			setText(str(sensor_value))
			grovepi.digitalWrite(redled,1)
			if grovepi.digitalRead(button):
				grovepi.digitalWrite(greenled,1)
				rotval1 = int(sensor_value)
				setText("SET MONEY TARGET")
				time.sleep(1)
				grovepi.digitalWrite(greenled,0)
				while True:
					try:
						grovepi.digitalWrite(redled,0)
						sensor_value = grovepi.analogRead(sensor) / 10
						setRGB(200,20,255)
						setText(str(sensor_value))
						grovepi.digitalWrite(redled,1)
						if grovepi.digitalRead(button):
						   grovepi.digitalWrite(greenled,1)
						   rotval2 = int(sensor_value)
						   setText("<YES \n        NO>")
						   time.sleep(1)
						   rotval3 = 0
						   grovepi.digitalWrite(greenled,0)
						   while True:
						     	try:
						      		grovepi.digitalWrite(redled,0)
								grovepi.digitalWrite(greenled,0)
								sensor_value = grovepi.analogRead(sensor) / 512
						      		rotval3 = int(sensor_value)
								grovepi.digitalWrite(redled,1)
								grovepi.digitalWrite(greenled,1)
						      		if rotval3 == 0 and grovepi.digitalRead(button):
									grovepi.digitalWrite(greenled,1)
									setText("   SAVING....")
									time.sleep(1)
									StartDate = datetime.date.today().strftime("%d/%m/%y")#"01/06/15"
									coin = 0
									gg = rotval1
									target = rotval2
									date_1 = datetime.datetime.strptime(StartDate, "%d/%m/%y")
									end_date = date_1 + datetime.timedelta(days=gg)
									today = datetime.datetime.now()

									d0 = datetime.datetime.now()
									d1 = date_1 + datetime.timedelta(days=gg)
									delta = d1 - d0

									out_file = open("/home/pi/te.txt","w")
									out_file.write(str(date_1) + "\n" + str(end_date) + "\n" + str(gg) + "\n" )
									out_file.close()

									out_file = open("/home/pi/te1.txt","w")
									out_file.write(str(d0) + "\n" + str(delta.days + 1) + "\n" + str(target) + "\n" + str(coin))
									out_file.close()

									grovepi.digitalWrite(greenled,0)
									grovepi.digitalWrite(redled,0)
									restart_program()
						      		if rotval3 >= 1 and grovepi.digitalRead(button):
									setText("    REPEAT")
									time.sleep(1)
									restart_program()
							except (IOError,TypeError) as e:
								print "Error"
						time.sleep(.2)
					except (IOError,TypeError) as e:
						print "Error"
			time.sleep(.1) 
		except (IOError,TypeError) as e:
	                print "Error"


else:
  grovepi.digitalWrite(greenled,1)
  h = open(filedati2,"r")
  lineh = h.readlines()
  setRGB(20,20,255)
  setText("   TARGET " + str(lineh[2]) + "D/L " + lineh[1].rstrip("\n") + " CASH " + lineh[3].rstrip("\n"))
  while True:
    try:
	input_value = grovepi.digitalRead(button)
	if input_value == 1:
		
	 	time.sleep(0.5)
		# Turn relays A ON
    		GPIO.output(22, GPIO.LOW)
		# read DVD button
		buzz()
		while True:
		
    		#if (GPIO.input(17)):
			if (GPIO.input(17)):
				setRGB(20,20,255)
				setText("  PLEASE  \n         WAIT")
				GPIO.output(22, GPIO.HIGH) # Turn relays A OFF
        			GPIO.output(27, GPIO.LOW) # Turn relays B ON
				buzz()
				sleep(.2) # time needed to go back
				GPIO.output(27, GPIO.HIGH) # Turn relays B OFF
				restart_deleting()

				with open("/home/pi/te.txt", "r") as file:
					linet=file.readlines()
				enddate = str(linet[1].rstrip("\n"))
				end = datetime.datetime.strptime(enddate, "%Y-%m-%d %H:%M:%S")
				today = datetime.datetime.now()
				delta = end - today

				with open("/home/pi/te1.txt", "r") as file:
					lineh=file.readlines()
				linh = int(lineh[3].rstrip("\n")) + 1
				lineh[0] = str(datetime.datetime.now()) + "\n"
				lineh[1] = str(delta.days + 1) + "\n"
				lineh[2] = str(lineh[2])
				lineh[3] = str(linh)

				if int(lineh[1]) ==0:
                                        setRGB(20,20,0)
                                        setText("  TARGET\n   FAILED")
                                        buzz()
					buzz()
					buzz()
				with open("/home/pi/te1.txt", "w") as file: 	
					file.writelines(lineh)
				h = open("/home/pi/te1.txt")
				lineh = h.readlines()
				setRGB(20,20,255)
				setText("  TARGET " + str(lineh[2]) + "D/L " + lineh[1].rstrip("\n") + " CASH " + lineh[3].rstrip("\n"))

				with open ("/home/pi/stat.txt", "a") as statistica:
					statistica.write(datetime.date.today().strftime("%d/%m/%y") + ";" + str(linh) + "\n")

				grovepi.digitalWrite(greenled,0)
				grovepi.digitalWrite(redled,1)
				os.system("sudo bash /home/pi/plot.sh")
				os.system("mpack -s 'CLINCKITY CLINK - ONE MORE COIN' /home/pi/statistic.png yourgmailaddress@gmail.com") # insert here recipient email address
				grovepi.digitalWrite(redled,0)
				grovepi.digitalWrite(greenled,1)

				if int(lineh[3].rstrip("\n")) >= int(lineh[2].rstrip("\n")):
					while True:
						try:
							setRGB(203,120,255)
							setText("  MISSION  \n  COMPLETED")
							buzz()
							restart_deleting()
							time.sleep(5)
						except IOError:
							print "Error"
				break
		


    except IOError:
        print "Error"
    except KeyboardInterrupt:	
	GPIO.output(22, GPIO.HIGH)
	GPIO.output(27, GPIO.HIGH)
	break
	
