import funciones_aux as fa

def leer(N):
	
	#comunicacion puerto serie con el sensor
	
	import serial
	
	sensor = serial.Serial('/dev/ttyACM0')
	sensor.flushInput()
		
	sensor.write("\x16T\r")
	a = sensor.read(N)
	sensor.close()
	
	return a
	"""
	#Para los test
	import random
	num = random.randrange(10000000,99999999)
	return str(num)
	"""
def consultar_modo():
	name = 'Docs/modos.txt'
	fichero = open(name, 'r')
	estado = fichero.readline()
	fichero.close()
	return estado

def multicapa_modo(pasillo):
	pasillo = str(pasillo)
	name = 'Docs/inventario/'+pasillo+'.txt'
	datos = fa.lectura_fichero(name, '\t')
	prox_lecturas = []
	for i in range(len(datos)):
		
		if(datos[i][3] == 'Multicapa\n'):
			prox_lecturas.append(datos[i])
	return prox_lecturas

def borrar(pasillo):
	import os
	pasillo = str(pasillo)
	name_doc = 'Docs/inventario/'+pasillo+'.txt'
	fichero = open(name_doc, 'r')
	a = []
	for linea in fichero.readlines():
		a.append(linea)
	fichero.close()
	print(a[len(a)-1])
	a.pop(len(a)-1)
	print(a[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("fichero cambiado")
def datos_pasillo(pasillo, alt):
	#funcion que guarda los datos del pasillo (altura)
	pasillo = str(pasillo)
	alt = str(alt)
	archivo = 'Docs/datospasillo/'+pasillo+'.txt'
	if(fa.checkfile(archivo)):
		return True
	else:
		
		nombre = 'Docs/datospasillo/'+pasillo+'.txt'
		fa.crear_fichero(nombre, 'inicio', alt)
		return False

def crear_buffer(pasillo, pos, lectura):
	#funcion que crea y actualiza el buffer segun lo que entra en posicion
	pasillo = str(pasillo)
	nombre = 'Docs/buffer/'+pasillo+'.txt'

	if (pos == 'inicio'):
		texto = pasillo+'\n'+'1\t'+'2'+'\n'+lectura
	else:
		texto = pasillo+'\n'+pos[0]+'\t'+pos[1]+'\n'+lectura
	import funciones_aux
	fa.crear_fichero(nombre, 'inicio', texto)

def avance(pasillo, lectura):
	#funcion que hace avanzar el buffer despues de la lectura
	#tenemos que meter lectura la menos como hueco vacio
	dato = consultar_modo()
	pasillo = str(pasillo)
	lectura = str(lectura)
	nombre = 'Docs/buffer/'+pasillo+'.txt'
	nombre2 = 'Docs/datospasillo/'+pasillo+'.txt'
	altura_max = fa.lectura_fichero(nombre2, 'ninguno')
	#corregimos el error de la funcion lectura_fichero()
	altura_max = altura_max[0][0]
		
	buffer_vec = fa.lectura_fichero(nombre, '\t')
	buffer_vec = buffer_vec[1]

	buffer_vec[1] = int(buffer_vec[1])
	buffer_vec[1] = str(buffer_vec[1])
	if (dato == 'OFF'):
		buffer_vec = fa.mov(buffer_vec, altura_max, 'avance')
		crear_buffer(pasillo, buffer_vec, lectura)
	else:
		actualizar_posicion(pasillo)
	

def retroceso(pasillo, lectura):
	pasillo = str(pasillo)
	nombre = 'Docs/buffer/'+pasillo+'.txt'
	nombre2 = 'Docs/datospasillo/'+pasillo+'.txt'
	altura_max = fa.lectura_fichero(nombre2, 'ninguno')
	#corregimos el error de la funcion lectura_fichero()
	altura_max = altura_max[0][0]
	buffer_vec = fa.lectura_fichero(nombre, '\t')
	
	buffer_vec = buffer_vec[1]

	buffer_vec[1] = int(buffer_vec[1])
	buffer_vec[1] = str(buffer_vec[1])

	

	buffer_vec = fa.mov(buffer_vec, altura_max, 'retroceso')
	crear_buffer(pasillo, buffer_vec, lectura)
	

def save_lectura(lectura, pasillo):
	pasillo =  str(pasillo)
	lectura = str(lectura)
	nombre_hojalecturas = 'Docs/inventario/'+pasillo+'.txt'
	nombre_buffer = 'Docs/buffer/'+pasillo+'.txt'
	
	buffer_vec = fa.lectura_fichero(nombre_buffer, '\t')
	buffer_vec = buffer_vec[1]

	buffer_vec[1] = int(buffer_vec[1])
	buffer_vec[1] = str(buffer_vec[1])

	

	texto = pasillo+'\t'+buffer_vec[0]+'\t'+buffer_vec[1]+'\t'+lectura+'\n'
	fa.crear_fichero(nombre_hojalecturas, 'final', texto)

def save_lectura2(lectura, pasillo):
	#para guardar las lecturas en una altura sobre la maxima
	pasillo =  str(pasillo)
	lectura = str(lectura)
	nombre_hojalecturas = 'Docs/inventario/'+pasillo+'.txt'
	nombre_buffer = 'Docs/buffer/'+pasillo+'.txt'
	
	buffer_vec = fa.lectura_fichero(nombre_buffer, '\t')
	buffer_vec = buffer_vec[1]

	buffer_vec[1] = int(buffer_vec[1])
	buffer_vec[1] = str(buffer_vec[1])

	aux = buffer_vec[1]
	aux = int(aux) + 1
	buff_aux = [str(buffer_vec[0]), str(aux)]

	texto = pasillo+'\t'+buff_aux[0]+'\t'+buff_aux[1]+'\t'+lectura+'\n'
	fa.crear_fichero(nombre_hojalecturas, 'final', texto)

def ultima(lectura,pasillo):
	#esta funcion guarda la ultima lectura para comparar luego si esta repetida
	pasillo = str(pasillo)
	lectura = str(lectura)
	nombre = 'Docs/repetidas/'+pasillo+'.txt'
	texto = lectura+'\n'
	fa.crear_fichero(nombre, 'final', texto)
	"""AHORA TENGO QUE CREAR UNA FUNCION QUE HAGA:
	1. SI ESTA EN LA PRIMERA POSICION NO HAGA NADA (ESTA DEBE ESTAR INCLUIDE EN SAVE_LECTURA)
	2. SI NO ESTA EN LA PRIMERA POSICION LO COMPARE CON LA LECTURA ANTERIOR Y ESTA NO SEA REPETIDA
	3. SI ESTA REPETIDA SACAR UN AVISO.
	"""


def lectura_normal(N, pasillo):
	lectura  = leer(N)
	save_lectura(lectura, pasillo)
	avance(pasillo, lectura)


"""
VOY A QUITAR EL HUECO PARA QUE SE HAGA AUTOMATICO CON EL BOTON DE PASO
LUEGO OTRA FUNCION IRA RECORRIENDO Y EN LAS POSICIONES CONSECUTIVAS VACIAS PONDRA HUECO
"""
def lectura_hueco(N, pasillo):
	save_lectura('hueco vacio', pasillo)
	avance(pasillo, 'hueco')

def lectura_multiple(N, pasillo):
	
	dato = consultar_modo()
	if(dato == 'OFF'):
		lectura = "Multicapa"
		save_lectura(lectura, pasillo)
		avance(pasillo, lectura)
	else:
		
		lectura = leer(N)

		save_lectura_modo_multicapa(str(lectura), str(pasillo))

def save_lectura_modo_multicapa(lectura, pasillo):
	import os
	pasillo =  str(pasillo)
	lectura = str(lectura)
	nombre_hojalecturas = 'Docs/inventario/'+pasillo+'.txt'
	nombre_buffer = 'Docs/buffer/'+pasillo+'.txt'
	nombre_seguridad = 'Docs/buffer/'+pasillo+'_seguridad.txt'
	
	buffer_vec = fa.lectura_fichero(nombre_buffer, '\t')
	buffer_vec = buffer_vec[1]

	buffer_vec[1] = int(buffer_vec[1])
	buffer_vec[1] = str(buffer_vec[1])




	datos_lecturas = fa.lectura_fichero(nombre_hojalecturas, '\t')
	for i in range(len(datos_lecturas)):

		texto = texto = pasillo+'\t'+datos_lecturas[i][1]+'\t'+datos_lecturas[i][2]+'\t'+datos_lecturas[i][3]
		fa.crear_fichero(nombre_seguridad, 'final', texto)


	nombre_aux = 'Docs/inventario/'+pasillo+'aux.txt'
	cambio = 0
	num = 0
	for i in range(len(datos_lecturas)):
		if(datos_lecturas[i][1] == buffer_vec[0] and datos_lecturas[i][2] == buffer_vec[1] and datos_lecturas[i][3] == 'Multicapa\n'):
				
				#texto = pasillo+'\t'+buffer_vec[0]+'\t'+buffer_vec[1]+'\t'+lectura+'\n'
				cambio = 1
	if (cambio == 1):
		for i in range(len(datos_lecturas)):
			
			if(datos_lecturas[i][1] == buffer_vec[0] and datos_lecturas[i][2] == buffer_vec[1] and datos_lecturas[i][3] == 'Multicapa\n'):
				
				texto = pasillo+'\t'+buffer_vec[0]+'\t'+buffer_vec[1]+'\t'+lectura+'\n'
				cambio = 1

			else:
				
				texto = pasillo+'\t'+datos_lecturas[i][1]+'\t'+datos_lecturas[i][2]+'\t'+datos_lecturas[i][3]
			
			fa.crear_fichero(nombre_aux, 'final', texto)
	else:
		print('cambio')
		print(cambio)
		if(cambio == 0):
			for i in range(len(datos_lecturas)):
				if(datos_lecturas[i][1] == buffer_vec[0] and datos_lecturas[i][2] == buffer_vec[1]):
					num = i
					break
			datos_lecturas.insert(num, [str(pasillo), str(buffer_vec[0]),str(buffer_vec[1]),str(lectura)+'\n'])
		for i in range(len(datos_lecturas)):
			texto = pasillo+'\t'+datos_lecturas[i][1]+'\t'+datos_lecturas[i][2]+'\t'+datos_lecturas[i][3]
			fa.crear_fichero(nombre_aux, 'final', texto)


	
	#ahora borramos el fichero antiguo y cambiamos el nombre al nuevo
	
	datos_nuevo = fa.lectura_fichero(nombre_aux, '\t')
	
	if(len(datos_nuevo)<len(datos_lecturas)):
		
		#entonces se ha producido un error, copio el archivo de seguridad
		
		os.remove(nombre_aux)
		os.rename(nombre_seguridad, nombre_hojalecturas)
	else:
		
		os.remove(nombre_hojalecturas)
		os.rename(nombre_aux, nombre_hojalecturas)

	

def lectura_sobrealtura(N, pasillo, alt_max):
	pasillo = str(pasillo)
	nombre_buffer = 'Docs/buffer/'+pasillo+'.txt'
	
	buffer_vec = fa.lectura_fichero(nombre_buffer, '\t')
	
	buffer_vec = buffer_vec[1]
	buffer_vec = buffer_vec[1]
	buffer_vec = int(buffer_vec)
	buffer_vec = str(buffer_vec)
        
	if(buffer_vec == str(alt_max)):
		lectura = leer(N)
		
		
		save_lectura2(lectura, pasillo)
		return True
	else:
                
		return False

def actualizar_posicion(pasillo):
	dato = consultar_modo()
	pasillo = str(pasillo)
	nombre = 'Docs/inventario/'+pasillo+'.txt'
	matriz_lecturas = fa.lectura_fichero(nombre, '\t')
	i = 0
	if (dato == 'OFF'):
		linea_final = matriz_lecturas[len(matriz_lecturas)-1]
		buffer_posicion = []
		buffer_posicion.append(linea_final[1])
		buffer_posicion.append(linea_final[2])
		crear_buffer(pasillo, buffer_posicion, 'movimiento')
		avance(pasillo, 'movimiento')
	else:
		while(matriz_lecturas[i][3] != 'Multicapa\n'):
			i = i + 1
		
		buffer_posicion = []
		buffer_posicion.append(matriz_lecturas[i][1])
		buffer_posicion.append(matriz_lecturas[i][2])
		crear_buffer(pasillo, buffer_posicion,'movimiento')

"""TENGO QUE HACER OTRA FUNCION QUE RECORRA TODO EL INVENTARIO Y PONGA HUECO
A LAS POSICIONES CONSECUTIVAS QUE NO SE HAN RELLENADO"""


	




