#!/usr/bin/python
# -*- coding: utf-8 -*-

######################################################################################################
 # SOFTWARE PARA DISPOSITIVO SOBRE DRON RADIOCONTROLADO.
 # DESARROLLO DE SOFTWARE E IMPLEMENTACIÓN DE HARDWARE:
 #  Juan de Dios Yáñez Ávila, CEO Onwards, Director I+D+i en Airvant.
 # EMAIL DE CONTACTO:
 #  juandediosyanez@onw4rds.com | juandediosyanez@gmail.com
 # ARCHIVO: interfaz.py
 # VERSIÓN: 2.1.
 # ENTORNO DE USO: Python 2.7.13.
 # FECHA: 2017/11/16
 # DERECHOS:
 ## Los derechos de uso/explotación de este software son al 50% por Airvant sociedad, y el 
 ## desarrollador del mismo. Software no destinado a venta. El código y archivos asociados están protegidos
 ## por las leyes de propiedad intelectual e industrial. El uso fraudulento y no permitido de los mismos
 ## está penado por la ley.
######################################################################################################

from Airvant_modo1 import *
from Tkinter import *

import datetime, ftplib, io, os, serial, time 
import RPi.GPIO as gpio

## LUCES DE CONTROL
LED1G = 4
LED1B = 17
LED2B = 27
LED34G = 18
LED3R = 23
LED4R = 24

gpio.setmode(gpio.BCM)
gpio.setwarnings(False)

## Led de control configuración
gpio.setup(LED1G, gpio.OUT)
gpio.setup(LED1B, gpio.OUT)
gpio.setup(LED2B, gpio.OUT)
gpio.setup(LED34G, gpio.OUT)
gpio.setup(LED3R, gpio.OUT)
gpio.setup(LED4R, gpio.OUT)

##################################################################################################
# VARIABLES GLOBALES Y DEL PROGRAMA                                                              #
##################################################################################################

ANALISIS_OPERATIVA = () # piloto_empieza, piloto_termina, len(picajes)

##################################################################################################
# FUNCIONES ESPECÍFICAS DE LOS BOTONES DE LA INTERFAZ DE USUARIO                                 #
##################################################################################################

def iniciarTrabajo():
	global ANALISIS_OPERATIVA
	## Cada vez que comenzamos un trabajo los parámetros de análisis se reinician.
	ANALISIS_OPERATIVA = ()
	# Nombre y dirección de nuestro archivo se genera en Airvant_modo1
	empresa = dato_empresa.get()
	pasillo = int(dato_pasillo.get())
	pasillo = str("{:03d}".format(pasillo))
	CODE = str(dato_CODE.get())
	longitud = int(dato_longitudcodigo.get())
	tiempolectura = int(dato_tiempolectura.get())
	if(CODE==""):
		print("Seleccione un tipo de código correcto")
		return
	if(CODE == "Code128"):
		ANALISIS_OPERATIVA = iniciarTrabajo_Code128(empresa, pasillo, longitud, tiempolectura)
	if(CODE == "GS1128"):
		ANALISIS_OPERATIVA = iniciarTrabajo_GS1128(empresa, pasillo, tiempolectura)
	if(CODE == "GS1128noSSCC"):
		ANALISIS_OPERATIVA = iniciarTrabajo_GS1128_noSSCC(empresa, pasillo, tiempolectura)
	return

def envioTrabajo():
	"""
	global ANALISIS_OPERATIVA
	if(len(ANALISIS_OPERATIVA) == 0):
		print("No hay datos para el análisis de la operativa.\n")
		ANALISIS_OPERATIVA = [0, 0, 0]
	piloto_empieza = ANALISIS_OPERATIVA[0]
	piloto_termina = ANALISIS_OPERATIVA[1]
	lecturas_totales = ANALISIS_OPERATIVA[2]
	"""
	### LUCES DE CONTROL
	global LED1G
	global LED1B
	global LED2B
	global LED34G
	global LED3R
	global LED4R
	
	piloto = dato_piloto.get()
	## Ponemos nombre y dirección a lecturas
	fecha = datetime.datetime.now()
	empresa = dato_empresa.get()
	pasillo = int(dato_pasillo.get())
	pasillo = str("{:03d}".format(pasillo))
	nombre_picajes = "lecturas " + str(fecha.year) + str(fecha.month) + str(fecha.day) + " " + empresa + " " + pasillo + ".txt"
	direccion_picajes = "picajes/" + str(nombre_picajes)
	
	## Analizamos el trabajo realizado por el piloto
	print("Trabajo del piloto {0} finalizado.\n" .format(piloto))
	"""
	tiempo_de_trabajo = piloto_termina - piloto_empieza
	print(" Análisis del trabajo:\n Nº de lecturas realizadas: {0}\n Tiempo de trabajo: {1}" .format(str(lecturas_totales), str(tiempo_de_trabajo)))
	## Ponemos variable globales a cero, para no tener que cerrar el programa
	ANALISIS_OPERATIVA = ()
	"""
	### ENVIAMOS POR FTP EL ARCHIVO lecturas

	# Datos FTP
	ftp_servidor = 'home662228864.1and1-data.host'
	ftp_usuario  = 'u87707226'
	ftp_clave    = 'airvant.1'
	ftp_raiz     = '/OPERATIVAS/Airvant_01/' # Carpeta del servidor donde queremos subir el fichero
	 
	# Datos del fichero a subir
    # Ruta al fichero que vamos a subir con todos los items registrados
	fichero_origen = direccion_picajes
    # Nombre que tendra el fichero en el servidor
	fichero_destino = nombre_picajes 
	 
	# Conectamos con el servidor
	try:
		s = ftplib.FTP(ftp_servidor, ftp_usuario, ftp_clave)
        ## class FTP(host='', user='', passwd='', acct='', timeout=_GLOBAL_DEFAULT_TIMEOUT, source_address=None)
		try:
            # ¿? Se abre el fichero de origen en binario, modo 'rb'
			f = open(fichero_origen, 'rb')
            # Especificamos el lugar donde se guardará el archivo que subimos desde el dispositivo
			s.cwd(ftp_raiz)
            # Guarda en el FTP el archivo leído en binario. Sin este comando no se guarda.
			s.storbinary('STOR ' + fichero_destino, f)
            ## def storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)
			f.close()
			s.quit()
			print ("\n PICAJE ENVIADO CORRECTAMENTE\n")
		except:
            		print("No se ha podido encontrar el fichero " + fichero_origen)
	except:
		print("No se ha podido conectar al servidor " + ftp_servidor)


##################################################################################################
# OPERACIONES DE ARRANQUE DEL PROGRAMA                                                           #
# Encendemos todas las luces para indicar que el técnico esta configurando el trabajo y borramos #
# de la pantalla cualquier alerta o trabajo anterior.                                            #
##################################################################################################

print("\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n")

##################################################################################################
# CÓDIGO RELACIONADO CON EL DISEÑO DE LA INTERFAZ USUARIO DEL TÉCNICO                            #
# - El técnico tiene que introducir los datos del trabajo a realizar por el piloto.              #
# - El técnico autoriza al piloto para comenzar su trabajo.                                      #
# - El técnico se encarga del envío y procesado del trabajo. Además de verificar que el trabajo. #
##################################################################################################	

root = Tk()
root.title("Lecturas Modo 01")
root.resizable(0,0)
# root.iconbitmap('onwards.ico') # DA ERROR PONER EL ICONO

menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Salir", command=root.quit) #root.quit
menubar.add_cascade(label="Archivo", menu=filemenu)
root.config(menu=menubar)
# ESTARÍA BIEN CREAR ALGO QUE PONGA EL DESARROLLADOR DE LA TECNOLOGÍA
img_airvant = PhotoImage(file="airvant_logo.png")

dato_piloto = StringVar()
dato_empresa = StringVar()
dato_pasillo = StringVar()
dato_tiempolectura = IntVar()
dato_CODE = StringVar()
dato_longitudcodigo = IntVar()

Label(root, text = "ID PILOTO | TIEMPO").grid(row=0, column=0)
Entry(root, textvariable = dato_piloto).grid(row=0, column=1)
Entry(root, textvariable = dato_tiempolectura, width = 2).grid(row=0, column=2)

Label(root, text = "EMPRESA | PASILLO").grid(row=1, column=0)
Entry(root, textvariable = dato_empresa).grid(row=1, column=1)
Entry(root, textvariable = dato_pasillo, width = 3).grid(row=1, column=2)

Label(root, text = "CÓDIGO A LEER").grid(row=2, column=0)
Radiobutton(root, text="Code-128 de longitud", variable=dato_CODE, value="Code128").grid(row=2, column=1)
Entry(root, textvariable = dato_longitudcodigo, width = 3).grid(row=2, column=2)
Radiobutton(root, text="GS1-128", variable=dato_CODE, value="GS1128").grid(row=3, column=1)
#Radiobutton(root, text="GS1-128 no SSCC", variable=dato_CODE, value="GS1128noSSCC").grid(row=3, column=2)

## BOTONES
Button(root, text = "COMENZAR PICAJE", command = iniciarTrabajo).grid(row=3, column=3, columnspan=2)
Button(root, text = "ENVIAR PICAJE", command = envioTrabajo).grid(row=3, column=5)
## Pantalla
#
Label(root, image=img_airvant).grid(row=0, rowspan=3, column=3, columnspan=3)

root.mainloop()