#!/usr/bin/env python

from mixcoatl.infrastructure.machine_image import MachineImage
from mixcoatl import resource_utils, utils
from prettytable import PrettyTable
import argparse
import sys
import os

if __name__ == '__main__':
    """ List machine images in a region. """
    parser = argparse.ArgumentParser()
    region_args = parser.add_mutually_exclusive_group(required=True)
    region_args.add_argument(
        '--image', '-i', type=int, help="Machine Image ID")
    region_args.add_argument('--regionid', '-r', type=int, help="Region ID.")
    region_args.add_argument(
        '--regionpid', '-R', help="Region Provider ID such as us-east-1.")

    parser.add_argument(
        '--registered', '-e', help='Returns only images with agent installed', action="store_true")

    group_two = parser.add_mutually_exclusive_group()
    group_two.add_argument('--json', action='store_true',
                           help='print API response in JSON format.')
    group_two.add_argument('--xml', action='store_true',
                           help='print API response in XML format.')
    group_two.add_argument('--csv', action='store_true',
                           help='print API response in CSV format.')

    cmd_args = parser.parse_args()

    if cmd_args.image is not None:
        results = MachineImage.all(machine_image_id=cmd_args.image)
    elif cmd_args.regionid is not None:
        results = MachineImage.all(
            region_id=cmd_args.regionid, registered=cmd_args.registered)
    elif cmd_args.regionpid is not None:
        results = MachineImage.all(region_id=resource_utils.get_region_id(
            cmd_args.regionpid), registered=cmd_args.registered)
    else:
        parser.print_help()
        sys.exit(1)

    if cmd_args.xml is True or cmd_args.json is True or cmd_args.csv is True:
        if cmd_args.xml is True:
            payload_format = "xml"
        elif cmd_args.csv is True:
            payload_format = "csv"
        else:
            payload_format = "json"

        print utils.print_format(results, payload_format)
    else:
        table = PrettyTable(
            ["ID", "Provider ID", "Name", "OS", "Arch", "Agent", "Status"])
        for r in results:
            table.add_row([
                r.machine_image_id,
                r.provider_id,
                r.name,
                r.platform,
                r.architecture,
                r.agent_version if hasattr(results, 'agent_version') else None,
                r.status])
        table.align = 'l'
        print(table)

    if 'DCM_DEBUG' in os.environ:
        print 'Results returned in', time.time() - start, 'seconds.'
