add argument parser (not finished yet)