import os
import shutil
import subprocess
import sys

from typing import Any

def RunShellCommand(cmd:list[str]) -> int | Any:
	process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
	process.wait()
	if process.stdout != None:
		for line in process.stdout:
			print(line.decode("utf-8"), end="")
	return process.returncode

def RunArchTest(elfFilePath:str, signatureFilePath:str):
	# Run the simulator
	print(f"Running simulation")

	try:
		makeFilePath = os.path.dirname(os.path.abspath(__file__))
		shutil.copy2(os.path.join(makeFilePath, "coreArch_tb.v"), os.getcwd())
		shutil.copy2(os.path.join(makeFilePath, "Makefile"), os.getcwd())
		RunShellCommand(["make"])
	except Exception as e:
		print(e)
		
	print(f"Simulation completed")

def main():
	if len(sys.argv) > 1:
		args = {}
		for item in sys.argv[1:]:
			parts = item.split('=')
			if len(parts) == 2:
				args[parts[0]] = parts[1]
			else:
				print(f"Invalid arg 'item'")
		
		if "isa" in args:
			isa = args["isa"]
			
			if isa == "rv32i":
				if "elf" in args:
					elfFilePath = args["elf"]

					if "signature" in args:
						signatureFilePath = args["signature"]

						RunArchTest(elfFilePath, signatureFilePath)
					else:
						print(f"Missing argument 'signature'")
				else:
					print(f"Missing argument 'elf'")
			else:
				print(f"Invalid isa '{isa}' must be 'rv32i'")
		else:
			print(f"Missing argument 'isa'")
		
if __name__ == "__main__":
	main()