import binascii
import struct


def get_info_cluster0(bytes_data):
	"""
	Función para obtener información del superbloque (cluster #0 de 1024 bytes) de la imagen analizada.
	Recibe: 
		bytes_data => list: lista de bytes leidos de la imagen que se analiza
	Devuelve: 
		fs_name, fs_version, fs_label, fs_clustersize_BE, 
		fs_numclusters_dir_BE, fs_numclusters_complete_BE 	
					=> tuple: tupla con la informacion interpretada de los bytes del superbloque
	"""
	fs_name = binascii.unhexlify(''.join(bytes_data[0:8]))  # Byte 0-8: nombre del sistema de archivos
															# Byte 8 => es un bad char: "\x00"
	#fs_name = fs_name.decode().replace('\x00','')  # se elimina bad char \x00 del nombre y se decodifican los bytes
	fs_name = fs_name.decode()  # se decodifican los bytes

	#fs_version = binascii.unhexlify(''.join(bytes_data[10:14])).decode().replace('\x00','')  # Byte 10-13: version de la implementacion
	fs_version = binascii.unhexlify(''.join(bytes_data[10:13])).decode()  # Byte 10-13: version de la implementacion
																 		  # Byte 13 => es un bad char: "\x00"
	#fs_label = binascii.unhexlify(''.join(bytes_data[20:36])).decode().replace('\x00','')  # Byte 20-35: etiqueta del volumen
	fs_label = binascii.unhexlify(''.join(bytes_data[20:35])).decode()    # Byte 20-35: etiqueta del volumen
																		  # Byte 35 => es un bad char: "\x00"
	fs_clustersize = binascii.unhexlify(''.join(bytes_data[40:44]))       # Byte 40-43: tamanio del cluster en bytes
	# como están representados en formato little endian, debemos pasarlo primero a big endian y despues hacer la conversión a decimal
	fs_clustersize_BE = struct.unpack("<L", fs_clustersize)[0]            # Convierte el valor fs_clustersize (little endian) a formato big endian en decimal
	
	fs_numclusters_dir = binascii.unhexlify(''.join(bytes_data[44:48]))   # Byte 44-47: numero de clusters que mide el directorio
	fs_numclusters_dir_BE = struct.unpack("<L", fs_numclusters_dir)[0]
	
	fs_numclusters_complete = binascii.unhexlify(''.join(bytes_data[48:52])) # Byte 48-51: numero de clusters que mide la unidad completa
	fs_numclusters_complete_BE = struct.unpack("<L", fs_numclusters_complete)[0]
	
	return fs_name, fs_version, fs_label, fs_clustersize_BE, fs_numclusters_dir_BE, fs_numclusters_complete_BE