#!/usr/bin/env python

import os
import sys
import argparse
import time
from mixcoatl.infrastructure.volume import Volume
from mixcoatl import resource_utils, utils
from prettytable import PrettyTable

if __name__ == '__main__':
    """ List Volumes"""
    start = time.time()
    parser = argparse.ArgumentParser()
    region_args = parser.add_mutually_exclusive_group()
    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.")

    user_args = parser.add_mutually_exclusive_group()
    user_args.add_argument("--userid", "-u", help="Owning user's VM login ID. For example, p100.")
    user_args.add_argument("--email", "-m", help="E-Mail address of owning user.")

    parser.add_argument("--groupid", "-g", type=int, help="Owning group's group ID.")
    parser.add_argument("--budgetid", "-b", type=int, help="Budget ID.")
    parser.add_argument("--nonattached", "-n", help="List non-attached volumes.", action="store_true")
    parser.add_argument("--minsize", type=int, help="Minimum size of the volumes.")

    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.regionid is not None:
        results = Volume.all(region_id=cmd_args.regionid)
    elif cmd_args.regionpid is not None:
        results = Volume.all(region_id=resource_utils.get_region_id(cmd_args.regionpid))
    else:
        results = Volume.all()

    results = resource_utils.get_volumes(results, vm_login_id=cmd_args.userid, email=cmd_args.email, group_id=cmd_args.groupid, budget_id=cmd_args.budgetid, size=cmd_args.minsize)

    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(["Volume ID", "Provider ID", "Zone", "Name", "Server", "Size", "Owner", "Budget", "Status"])
        for r in results:
            if hasattr(r, 'server'):
                server = r.server['server_id'] if 'server_id' in r.server else 'Not Mounted'
            else:
                server = 'Not Mounted'

            table.add_row([
                r.volume_id,
                r.provider_id,
                r.data_center['data_center_id'],
                r.name,
                server,
                r.size_string,
                r.owning_account['account_id'],
                r.budget,
                r.status])
        table.align = 'l'
        print(table)

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