pretty much all of this stuff is done by argparse

not even sure if I need a class for the CLI