#!/usr/bin/python

import sys
import argparse

from os_nagios.plugins import base, rabbitmq


def rabbitmq_connect_handler(args):
    return rabbitmq.connect_plugin(args.verbose, args.host, args.port,
                                   args.queue, args.vhost, args.user,
                                   args.password, args.exchange,
                                   args.routing_key)


def get_argparser():
    parser = argparse.ArgumentParser(description='RabbitMQ plugins.')
    parser.add_argument('-v', '--verbose', type=int, default=0,
                        choices=range(0, 4),
                        help='Verbose output mode, available (0,1,2,3)')

    subparsers = parser.add_subparsers()

    p = subparsers.add_parser('connect', help='RabbitMQ connection plugin.')
    p.set_defaults(handler=rabbitmq_connect_handler)
    p.add_argument('-H', '--host', default='localhost', help='Host address.')
    p.add_argument('-P', '--port', default='5672', help='Host port.')
    p.add_argument('-q', '--queue', default='nagios_check',
                   help='Name of queue declared in RabbitMQ.')
    p.add_argument('-v', '--vhost', default='/', help='Virtual host')
    p.add_argument('-u', '--user', default='guest', help='Username')
    p.add_argument('-p', '--password', default='guest', help='Password')
    p.add_argument('-e', '--exchange', default='nagios_chk', help='Exchange')
    p.add_argument('-r', '--routing_key', default='nagios.check', help='Routing key')

    return parser


def main(args):
    def return_result(code, message):
        # TODO: support verbose modes (0,1,2,3)
        sys.stdout.write(message[0][0])
        sys.stdout.write('\n')
        sys.stdout.flush()
        sys.exit(code)

    try:
        (code, message) = args.handler(args)
    except Exception as errmsg:
        msg = "Plugin error - %r" % (errmsg,)
        return_result(base.RET_UNKNOWN, [(msg, None)])
    else:
        return_result(code, message)


if __name__ == '__main__':
    parser = get_argparser()
    args = parser.parse_args()
    main(args)
