from .math_utils import show_byte_matrix

def char_width(char_matrix) -> int:
	"""Berechnung der Bits für die Zeichenbreite

	Args:
			char_matrix (int): Zeichen als Array[int]

	Returns:
			int: Anzahl Bits für die Zeichenbreite
	"""
	max_val = max(char_matrix)

	val = max_val
	cw = 0
	while 0xFFFFFFFF & val:
		"""rechts shiften, bis alles Nullen da sind"""
		val >>= 1
		cw += 1

	return cw

def shift_letter_right(char, letter, debug=False) -> bool:
	"""Prüfe ob das Zeichen auch komplett nach rechts gezogen ist

	Args:
			letter (_type_): Array[0..nBytes]

	Returns:
			bool: _description_
	"""

	def isLetterRight(letter):
		def isByteRight(byte):
			return True if 1 & byte == 1 else False

		for byte in letter:
			if isByteRight(byte):
				return True

		return False

	def shiftLetterRight(letter):
		def shift(letter):
			return [byte >> 1 for byte in letter]

		shifted = letter
		for i in range(8):  # max 1 Bit's
			shifted = shift(shifted)
			if isLetterRight(shifted):
				break

		return shifted

	if isLetterRight(letter):
		return letter

	# letter is not right shifted
	shifted = shiftLetterRight(letter)

	if debug:
		print('origin:')
		show_byte_matrix(char, letter)
		print('shifted')
		show_byte_matrix(char, shifted)

	return shifted

def align_font(font, debug=False):
	chars = [char for char in font]
	print(chars)

	# Print the dictionary
	print('font_pretty = {')
	for char in sorted(font.keys()):
		shifted = shift_letter_right(char=char, letter=font[char], debug=debug)
		hex_values = [f'0x{val:02X}' for val in shifted]
		print(f"\t'{char}': [{', '.join(hex_values)}],")
	print('}')

	# return f'#keys: {len(list(font.keys()))}'
	return f'#keys: {len(font)}'
