#!/usr/bin/python

import optparse
try:
    import autotest.common  # pylint: disable=W0611
except ImportError:
    import common  # pylint: disable=W0611
from autotest.cli import rpc


def parse_options():
    usage = "usage: %prog [options] job_id"
    parser = optparse.OptionParser(usage=usage)
    parser.add_option("-m", "--machine", dest="machine")
    parser.add_option("-t", "--test", dest="test")
    parser.add_option("-T", "--type", dest="type", type="choice",
                      choices=["all", "test", "iteration", "attr", "perf"])
    parser.add_option("-k", "--key", dest="key")
    parser.set_defaults(type="all")
    options, args = parser.parse_args()
    options.show_test_keyvals = options.type in ("all", "test")
    options.show_attr_keyvals = options.type in ("all", "iteration", "attr")
    options.show_perf_keyvals = options.type in ("all", "iteration", "perf")
    options.show_iter_keyvals = (
        options.show_perf_keyvals or options.show_attr_keyvals)
    return parser, options, args


def print_keyvals(keyval, format_string, options):
    for key, value in keyval.iteritems():
        if not options.key or key == options.key:
            print format_string % (key, value)


def print_views(test_views, options):
    for view in test_views:
        if not options.machine:
            print "Machine: %s" % view["hostname"]
        if not options.test:
            print "Test: %s" % view["test_name"]
        if options.show_test_keyvals:
            print "Test Attributes:"
            print_keyvals(view["attributes"], "\t%s = %s", options)
        if options.show_iter_keyvals:
            print "Iteration Attributes:"
            for i, iteration in enumerate(view["iterations"]):
                print "\tIteration #%d:" % (i + 1)
                if options.show_attr_keyvals:
                    print_keyvals(iteration["attr"], "\t\t%s(attr) = %s",
                                  options)
                if options.show_perf_keyvals:
                    print_keyvals(iteration["perf"], "\t\t%s(perf) = %s",
                                  options)
        print


def main():
    parser, options, args = parse_options()
    if not args:
        parser.print_help()
        return

    query_filter = {}
    if options.machine:
        query_filter["hostname"] = options.machine
    if options.test:
        query_filter["test_name"] = options.test

    comm = rpc.tko_comm()
    test_views = []
    for job_id in args:
        query_filter["job_tag__startswith"] = "%s-" % job_id
        test_views += comm.run("get_detailed_test_views", **query_filter)
    print_views(test_views, options)


if __name__ == "__main__":
    main()
