import argparse


DEFAULTS = {'debug': False,
            }


def get_parser(description, arguments, defaults):
    """

    :param description: Program description
    :param arguments: List of well known arguments in use
    :param defaults: Default values

    :return: ArgumentParser
    :rtype: argparse.ArgumentParser
    """
    parser = argparse.ArgumentParser(description = description,
                                     add_help = True,
                                     formatter_class = argparse.ArgumentDefaultsHelpFormatter,
                                     )
    for this in arguments:
        if this == 'debug':
            parser.add_argument('--debug',
                                dest='debug',
                                action='store_true', default=defaults.get(this, DEFAULTS.get(this)),
                                help='Enable debug operation'
                                )
        elif this == 'dirs':
            parser.add_argument('--dirs',
                                dest = 'dirs',
                                default = None,
                                nargs = '*',
                                help = 'Find hosts based on cosmos host directorys ending with SUFFIX',
                                metavar = 'SUFFIX',
                                )
        elif this == 'outfile':
            parser.add_argument('--outfile',
                                dest = 'outfile',
                                default = None,
                                help = 'Output filename (to not print to stdout)',
                                metavar = 'FILENAME',
            )
        elif this == 'hostsfile':
            parser.add_argument('--hostsfile',
                                dest = 'hostsfile',
                                default = None,
                                help = 'Input hosts YAML file',
                                metavar = 'FILENAME',
            )
        elif this == 'addfile':
            parser.add_argument('--addfile',
                                dest = 'addfile',
                                default = None,
                                help = 'Add contents of this YAML file to the output',
                                metavar = 'FILENAME',
            )
        elif this == 'classesfile':
            parser.add_argument('--classesfile',
                                dest='classesfile',
                                default=None,
                                help='Input classes YAML file (cosmos-rules.yaml)',
                                metavar='FILENAME',
                                )
        else:
            raise ValueError('Unknown argument: {}'.format(this))

    return parser