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

import datetime
import io
import os
import serial
import time
from Tkinter import *

mapa = list()
direccion_mapa = str()
direccion_mapa_procesado = str()
pantalla = str("________")

#################################
# FUNCIONES DE LA INTERFAZ
#################################

def mapa_simple():
    dato = "simple\n"
    mapa.append(dato)
    archivo_mapa = open(direccion_mapa, 'a')
    archivo_mapa.write(dato)
    archivo_mapa.close()
    return pantalla.set("SIMPLE")

def mapa_hueco():
    dato = "hueco\n"
    mapa.append(dato)
    archivo_mapa = open(direccion_mapa, 'a')
    archivo_mapa.write(dato)
    archivo_mapa.close()
    return pantalla.set("HUECO")

def mapa_bulto():
    dato = "bulto\n"
    mapa.append(dato)
    archivo_mapa = open(direccion_mapa, 'a')
    archivo_mapa.write(dato)
    archivo_mapa.close()
    return pantalla.set("BULTO")

def mapa_incidencia():
    dato = "incidencia\n"
    mapa.append(dato)
    archivo_mapa = open(direccion_mapa, 'a')
    archivo_mapa.write(dato)
    archivo_mapa.close()
    return pantalla.set("INCIDENCIA")

def mapa_multicapa_simple():
    dato = "multicapa-simple\n"
    mapa.append(dato)
    archivo_mapa = open(direccion_mapa, 'a')
    archivo_mapa.write(dato)
    archivo_mapa.close()
    return pantalla.set("MULTICAPA SIMPLE")

def mapa_multicapa_incidencia():
    dato = "multicapa-incidencia\n"
    mapa.append(dato)
    archivo_mapa = open(direccion_mapa, 'a')
    archivo_mapa.write(dato)
    archivo_mapa.close()
    return pantalla.set("MULTICAPA INCIDENCIA")

def borrar_ultima():
    mapa.pop()
    archivo_mapa = open(direccion_mapa, 'w')
    archivo_mapa.close()
    for dato in mapa:
        archivo_mapa = open(direccion_mapa, 'a')
        archivo_mapa.write(dato)
        archivo_mapa.close()
    return pantalla.set("BORRADA ÚLTIMA")


def mapear():
    # CREAMOS UN ARCHIVO DONDE IREMOS GUARDANDO EL MAPA
    empresa = dato_empresa.get()
    pasillo = int(dato_pasillo.get())
    pasillo = str("{:03d}".format(pasillo))
    alturamax = int(dato_alturamax.get())
    piking = str(dato_piking.get())

    global direccion_mapa
    fecha = datetime.datetime.now()

    nombre_mapa = "mapa " + str(fecha.year) + str(fecha.month) + \
        str(fecha.day) + " " + empresa + " " + pasillo + ".txt"
    direccion_mapa = "mapas/" + str(nombre_mapa)

    existe_mapa = False
    if(os.path.exists(direccion_mapa) == False):
        archivo_mapa = open(direccion_mapa, "w")
        archivo_mapa.close()
    else:
        archivo_mapa = open(direccion_mapa, "r")
        existe_mapa = True
        # Actualizamos nuestra variable mapa. Podremos continuar el trabajo por donde lo dejamos,
        # pero actualmente no podemos especificar el punto exacto donde lo dejamos
        mapa = archivo_mapa.readlines()
        archivo_mapa.close()
        # Si el mapa se comenzó pero no tiene nigún registro se aconseja borrarlo.
        if(len(mapa) == 0):
            archivo_mapa = open(direccion_mapa, "w")
            archivo_mapa.close()
        #else:
            # TENEMOS QUE CREAR UN AVISO DE QUE EXISTE EL TRABAJO, CON UNA VENTANA EMERGENTE. Y QUE
            # LO VAMOS A CONTINUAR
    pantalla.set("** MAPEO ACTIVO **")

def fin_mapeo():
    global mapa
    global direccion_mapa
    global direccion_mapa_procesado
    
    pantalla.set("** MAPEO TERMINADO **")
    time.sleep(2)
    pantalla.set("** PROCESANDO MAPEO **")
    # Ahora tenemos que crear la matriz de datos de acuerdo con la altura máxima y la zona de piking
    alturamax = int(dato_alturamax.get())
    piking = str(dato_piking.get())
    if(piking == "True"):
        alturamin = 2
    if(piking == "False"):
        alturamin = 1
    altura = alturamin
    columna = 1
    subiendo = True
    anterior_multicapa = False
    archivo_mapa = open(direccion_mapa, "r")
    procesando_mapa = archivo_mapa.readlines() ### nuestra lista
    archivo_mapa.close()
    direccion_mapa_procesado = direccion_mapa.split("/")
    direccion_mapa_procesado = str(direccion_mapa_procesado[0])+"/procesado "+str(direccion_mapa_procesado[1])
    archivo_mapa_procesado = open(direccion_mapa_procesado, "w")
    archivo_mapa_procesado.close()
    # Algoritmo para el procesamiento de los datos del mapa
    for dato in procesando_mapa:
        analisis_dato = dato.split("-")
        if(analisis_dato[0]=="multicapa"):
            aux2 = str(columna)+"|"+str(altura)+"|"+str(dato)
            archivo_mapa_procesado = open(direccion_mapa_procesado, "a")
            archivo_mapa_procesado.write(aux2)
            archivo_mapa_procesado.close()
            anterior_multicapa = True
        else:
            if(anterior_multicapa == True):
                if(subiendo == True):
                    altura = altura + 1
                    if(altura > alturamax):
                        altura = altura - 1
                        columna = columna + 1
                        subiendo = False
                else:
                    altura = altura - 1
                    if(altura < alturamin):
                        altura = altura + 1
                        columna = columna +1
                        subiendo = True
                aux2 = str(columna)+"|"+str(altura)+"|"+str(dato)
                archivo_mapa_procesado = open(direccion_mapa_procesado, "a")
                archivo_mapa_procesado.write(aux2)
                archivo_mapa_procesado.close()
            else:
                aux2 = str(columna)+"|"+str(altura)+"|"+str(dato)
                archivo_mapa_procesado = open(direccion_mapa_procesado, "a")
                archivo_mapa_procesado.write(aux2)
                archivo_mapa_procesado.close()
            if(subiendo == True):
                altura = altura + 1
                if(altura > alturamax):
                    altura = altura - 1
                    columna = columna + 1
                    subiendo = False
            else:
                altura = altura - 1
                if(altura < alturamin):
                    altura = altura + 1
                    columna = columna +1
                    subiendo = True
            anterior_multicapa = False
                
    pantalla.set("** MAPEO PROCESADO **")
    time.sleep(2)
    mapa.clear()
    direccion_mapa = str()
    pantalla.set("** CREE NUEVO MAPEO **")


###############################
# INTERFAZ DE USUARIO PARA MAPEO
#################################

root = Tk()
root.title("Airvant Mapeo Manual")
root.geometry("480x320")
root.resizable(0, 0)

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_empresa = StringVar()
dato_pasillo = IntVar()
dato_alturamax = IntVar()
dato_piking = StringVar()
#dato_email = StringVar()
pantalla = StringVar()

## PARTE DE CONFIGURACIÓN DEL MAPEO
Label(root, text="EMPRESA").grid(row=0, column=0)
Entry(root, textvariable=dato_empresa).grid(row=0, column=1)
Label(root, text="PASILLO").grid(row=1, column=0)
Label(root, text="ALTURA").grid(row=1, column=1)
Entry(root, textvariable=dato_pasillo, width=4).grid(row=2, column=0)
Entry(root, textvariable=dato_alturamax, width=2).grid(row=2, column=1)
Radiobutton(root, text="piking en 1", variable=dato_piking, value="True").grid(row=3, column=0)
Radiobutton(root, text="sin piking", variable=dato_piking, value="False").grid(row=3, column=1)

Label(root, bg="CadetBlue", textvariable=pantalla).grid(row=0, column=2, columnspan=2)
pantalla.set("** CREE MAPEO **")
Button(root, text="SIMPLE", command=mapa_simple).grid(row=1, column=2)
Button(root, text="MULT-SIMPLE", command=mapa_multicapa_simple).grid(row=1, column=3)
Button(root, text="HUECO", command=mapa_hueco).grid(row=2, column=2)
Button(root, text="BULTO", command=mapa_bulto).grid(row=2, column=3)
Button(root, text="INCIDENCIA", command=mapa_incidencia).grid(row=3, column=2)
Button(root, text="MULT-INCIDENCIA", command=mapa_multicapa_incidencia).grid(row=3, column=3)

Button(root, text="MAPEAR", command=mapear).grid(row=4, column=0)
Button(root, text="FINALIZAR MAPEO", command=fin_mapeo).grid(row=4, column=1, columnspan=2)
Button(root, text="BORRAR ÚLTIMA", command=borrar_ultima).grid(row=4, column=3)

###
### AQUI DEBERÍA HABER OTROS DOS BOTONES, UNO DE FUSIONAR Y OTRO DE ENVIAR POR EMAIL
#Button(root, text="FUSIONAR", command=fusionar).grid(row=4, column=1)
#Button(root, text="ENVIAR TRABAJO", command=envioTrabajo).grid(row=4, column=2)

#Label(root, image=img_airvant).grid(row=0, rowspan=11, column=3)

root.mainloop()