import difflib
import os
from dis import dis
from pathlib import Path

from rich_313_parser import parse_pyc_file
from python_37_314 import recursive_build_bytecode_table

def main():
    files = sorted(os.listdir(os.path.join(os.path.dirname(__file__), "samples")))
    # We assume files are grouped and take every other file here
    selection_choice = files[::2]
    for n, c in enumerate(selection_choice):
        print(f"{n}. {c}")
    n = int(input("Select a file: "))
    symbols = []
    for file in files[2*n:2*n+2]:
        print(file)
        try:
            pyc = parse_pyc_file(Path(os.path.join(os.path.dirname(__file__), "samples", file)))
            table: dict = recursive_build_bytecode_table(pyc.code, {}, "")
        except ValueError:
            raise

        print(list(table.keys()))

        symbols.append(sorted(pyc.code.co_names))
        if len(symbols) == 2:
            differ = difflib.Differ()
            print("\n".join(differ.compare(symbols[0], symbols[1])))
            symbols = []
        print(pyc.code.co_code.hex(":"))
        dis(pyc.code.co_code, depth=3)

if __name__ == '__main__':
    main()
