#!python

import crayons
import colorama

from argparse import ArgumentParser, FileType

from humanize_gcode import load_gcode_flavour, SUPPORTED_FLAVOURS


def gray(s):
	return colorama.Style.DIM + s + colorama.Style.RESET_ALL


LONG_EXCLUDED = ('G0', 'G1')


if __name__ == '__main__':
	parser = ArgumentParser(description='#TODO')

	parser.add_argument('flavour', choices=SUPPORTED_FLAVOURS.keys())
	parser.add_argument('file', type=FileType('r'))

	parser.add_argument('--ljust', '-l', type=int, default=30)

	args = parser.parse_args()

	try:
		flavour = load_gcode_flavour(args.flavour)

		for line in args.file:
			parts = line.split(';')
			raw_gcode = parts[0].rstrip()
			if not raw_gcode:
				continue

			gcode_id = raw_gcode.split()[0]

			gcode = flavour.get(gcode_id)

			if gcode:
				print(crayons.white(f'{gcode.name.ljust(args.ljust)} {gcode.description}'))

			print(raw_gcode.ljust(args.ljust), gray(';' + ';'.join(parts[1:]).rstrip()) if len(parts) > 1 else '')

			if not gcode:
				print(crayons.yellow('Unknown GCode'))
			elif gcode_id not in LONG_EXCLUDED:
				print(crayons.green(gcode.long_description.replace('. ', '.\n')))

			print()
	finally:
		args.file.close()
