#!/usr/bin/env python

# Import libs
import argparse
import sys

from salteventsd.daemon import SaltEventsDaemon


class ArgParser(object):
    '''
    Simple Argument-Parser class
    '''
    def __init__(self):
        '''
        Init the Parser
        '''
        self.main_parser = argparse.ArgumentParser()
        self.add_args()

    def add_args(self):
        '''
        Add new arguments
        '''

        self.main_parser.add_argument(
            '-c',
            '--configuration-file',
            type=str,
            default=None,
            dest='config',
            required=False,
            metavar='FILE',
            help=('configuration file to use'),
        )

        self.main_parser.add_argument(
            '-l',
            '--loglevel',
            type=str,
            default=False,
            dest='loglevel',
            required=False,
            help=('the loglevel to start the daemon in the foreground with')
        )

        self.main_parser.add_argument(
            '--logfile',
            type=str,
            default=None,
            dest='logfile',
            required=False,
            help=('the logfile to write log messages to')
        )

        self.main_parser.add_argument(
            '-d',
            '--daemonize',
            type=bool,
            default=False,
            const=True,
            dest='daemonize',
            required=False,
            nargs='?',
            help=('daemonize on start, False when run on console, '
                  'True when invoked through init-skript')
        )

        self.main_parser.add_argument(
            '-v',
            '--version',
            type=bool,
            default=False,
            const=True,
            dest='version',
            required=False,
            nargs='?',
            help='print the daemons version number'
        )

    def parse_args(self):
        '''
        parses and returns the given arguments in a namespace object
        '''
        return self.main_parser.parse_args()

    def phelp(self):
        self.main_parser.print_help()


def main():
    # sample invocation
    # salt-eventsd -l debug (foreground and debug)
    # salt-eventsd -d (daemonize default loglevel)

    opts = ArgParser()
    args = vars(opts.parse_args())

    if args['version']:
        import salteventsd
        print('salt-eventsd version {0}'.format(salteventsd.__version__))
        sys.exit(0)

    daemon = SaltEventsDaemon(
        config=args['config'],
        log_level=args['loglevel'],
        log_file=args['logfile'],
        daemonize=args['daemonize']
    )

    if args['daemonize']:
        daemon.start()
    else:
        daemon.listen()

if __name__ == '__main__':
    main()
