import RPi.GPIO as gpio
import time as t

gpio.setmode(gpio.BCM)
gpio.setwarnings(False)
gpio.setup(23, gpio.OUT)
gpio.setup(24, gpio.IN)

def checkfile(archivo):
	#FUNCION PARA DETERMINAR SI EXISTE UN FICHERO.
	#formato archivo carpeta/archivo.extension
	import os.path
	archivo = str(archivo)
	return os.path.exists(archivo)
def borrar(pasillo):
	import os
	pasillo = str(pasillo)
	name_doc = 'lecturas/'+pasillo+'.txt'
	fichero = open(name_doc, 'r')
	a = []
	for linea in fichero.readlines():
		a.append(linea)
	fichero.close()
	
	a.pop(len(a)-1)
	
	os.remove(name_doc)
	fichero2 = open(name_doc, 'w')
	for i in range(len(a)):
		for j in range(len(a[i])):
			fichero2.write(a[i][j])
	fichero2.close()
	print("Borrado")
def leer(N):
        import serial
	if 'sensor' in locals():
                sensor.close()
        if 'sensor' in globals():
                sensor.close()
        
        sensor = serial.Serial('/dev/ttyACM0', timeout = 28)
	sensor.flushInput()
	sensor.write("\x16T\r")
	
	a = sensor.read(N)
	buf = sensor.inWaiting()
	
	print(a)
	if (buf != 0):
                a = 'error'
                
	sensor.close()
	
	return a


	"""
	import serial
	
	sensor = serial.Serial('/dev/ttyACM0')
	
	sensor.flushInput()
	sensor.write("\x16T\r")
	a = sensor.read(N)
	a = str(a)
	
	sensor.close()
	return str(a)
	
	import random
	num = random.randrange(10000000,99999999)
	ultima = Label(ventana, text = num).place(x=160, y = 90)
	return str(num)
	"""
def crear_fichero(nombre, opcion, texto):
	#funcion auxiliar creacion de fichero. El nombre tiene que escribirse con la extension.
	#en el nombre si la ubicacion es distinta le pongo la ubicacion
	opcion = str(opcion)
	nombre = str(nombre)
	if(opcion == 'inicio'):
		fichero = open(nombre, 'w')
		fichero.write(texto)
		fichero.close()
	else:
		if(checkfile(nombre)):
			fichero = open(nombre, 'a')
			fichero.write(texto)
			fichero.close()
		else:
			fichero = open(nombre, 'w')
			fichero.write(texto)
			fichero.close()


def envio(pasillo, empresa):
	import ftplib
	import os
	 
	# Datos FTP
	ftp_servidor = 'home662228864.1and1-data.host' #'home672471072.1and1-data.host'
	ftp_usuario  = 'u87707226' #'u88544423'
	ftp_clave    = 'airvant.1' #'juan2442'
	ftp_raiz     = '/inventarios/lecturas' #'/airvant2/lecturas' # Carpeta del servidor donde queremos subir el fichero
	 
	# Datos del fichero a subir
	fichero_origen = 'lecturas/'+str(empresa)+str(pasillo)+'.txt' # Ruta al fichero que vamos a subir
	fichero_destino = str(empresa)+str(pasillo)+'.txt' # Nombre que tendra el fichero en el servidor
	 
	# Conectamos con el servidor
	try:
		s = ftplib.FTP(ftp_servidor, ftp_usuario, ftp_clave)
		try:
			f = open(fichero_origen, 'rb')
			s.cwd(ftp_raiz)
			s.storbinary('STOR ' + fichero_destino, f)
			f.close()
			s.quit()
			print ("Enviado correctamente");
		except:
			print "No se ha podido encontrar el fichero " + fichero_origen
	except:
		print "No se ha podido conectar al servidor " + ftp_servidor

from Tkinter import *

def go():
        inputValue = False
        
        pasillo = entrada_pasillo.get()
	longitud = long_codigo.get()
	empresa_ = empresa.get()
	print(pasillo, longitud) #print(pasillo, longitud, num)
	nombre = 'lecturas/'+str(empresa_)+str(pasillo)+'.txt'
	aux = 0
	ultima_lectura = ''
	
	while(True):
		print("Lectura: {0}\n" .format(aux))
		gpio.output(23, True) # encendemos led rojo inicio operacion
		
		lectura = leer(int(longitud))
		texto = lectura+'\n'
		if (lectura != ultima_lectura and lectura != 'error' and lectura != ''):
                        aux = aux + 1
                        gpio.output(23, False)
                        ultima_lectura = lectura
                        opcion = 'final'
                        titular = 'Correcto' + lectura
                        opcion = str(opcion)
                        nombre = str(nombre)
                        if(opcion == 'inicio'):
                                fichero = open(nombre, 'w')
                                fichero.write(texto)
                                fichero.close()
                        else:
                                if(checkfile(nombre)):
                                        fichero = open(nombre, 'a')
                                        fichero.write(texto)
                                        fichero.close()
                                else:
                                        fichero = open(nombre, 'w')
                                        fichero.write(texto)
                                        fichero.close()
                        t.sleep(1.2)
                if(lectura == 'error'):
                        gpio.output(23, False)
                        t.sleep(0.4)
                        gpio.output(23, True)
                        t.sleep(0.4)
                        gpio.output(23, False)
                        t.sleep(0.4)
                        gpio.output(23, True)
                        t.sleep(0.4)
                        gpio.output(23, False)
                        t.sleep(0.4)
                        gpio.output(23, True)
                        t.sleep(0.4)
                        gpio.output(23, False)
                        titular = 'Repetida' + lectura
                if(lectura == ''):
                        gpio.output(23, False)
                        t.sleep(0.2)
                        gpio.output(23, True)
                        t.sleep(0.2)
                        gpio.output(23, False)
                        t.sleep(0.2)
                        gpio.output(23, True)
                        t.sleep(0.2)
                        gpio.output(23, False)
                        t.sleep(0.2)
                        gpio.output(23, True)
                        t.sleep(2)
                        inputValue = gpio.input(24)
                        if(inputValue == True):
                            gpio.output(23, False)
                            return #no salimos de la funcion go()
                        titular = 'Repetida' + lectura
                    
	

def fin():
	pasillo = entrada_pasillo.get()
	empresa_ = empresa.get()
	envio(str(pasillo), str(empresa_))

def borrar_():
        empresa_b = empresa.get()
        pasillo_b = entrada_pasillo.get()
        pasar = empresa_b+pasillo_b
        pasar = str(pasar)
        borrar(pasar)

	

#datos de la ventana
ventana = Tk()
ventana.title("Airvant Inventario")
#ventana.iconbitmap("../icon_inventario.ico")
#ventana.geometry("600x320")
ventana.config(bg="lightblue")

menubar = Menu(ventana)
ventana.config(menu=menubar)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Salir", command=ventana.quit)
menubar.add_cascade(label="Archivo", menu=filemenu)

img_ico = PhotoImage(file="../icon_inventario.png")

entrada_pasillo = StringVar()
long_codigo = StringVar()
empresa = StringVar()

Label(ventana, text="Aplicacion para inventariado de almacen. Version 0.1.\nDesarrollada por Onwards.\n", justify="center").grid(row=0, column=0)
Label(ventana, image=img_ico).grid(row=0, rowspan=3, column=1)


#titulo1 = Label(ventana, text = "APP para control del sensor", relief= 'groove').place(x = 10, y = 10)
form_pasillo = Label(ventana, text = "Pasillo").place(x=10, y = 50)
pasillo = Entry(ventana, textvariable=entrada_pasillo, width = 8).place(x=10, y = 90)

#form_numero = Label(ventana, text = "Numero de lecturas").place(x = 10, y = 130)
#numero = Entry(ventana, textvariable=numerodelecturas, width = 8).place(x = 10, y = 170)

form_longitud = Label(ventana , text = "Longitud del codigo").place(x = 10, y = 210)
longitud = Entry(ventana, textvariable=long_codigo, width = 8).place(x = 10, y = 250)
form_empresa = Label(ventana, text = "Empresa", width = 8).place(x = 10, y = 290)
empresa2 = Entry(ventana, textvariable=empresa, width = 8).place(x = 10, y = 330)
boton = Button(ventana, text = "Empezar", command = go).place(x = 10, y = 390)

boton_fin = Button(ventana, text = "Fin pasillo", command = fin).place(x = 90, y = 390)

boton_borrar = Button(ventana, text = "Borrar ultima lectura", command = borrar_).place(x = 50, y = 450)
#mainloop

ventana.mainloop()

