#!/usr/bin/env python

from mixcoatl.infrastructure.server import Server
from prettytable import PrettyTable
import argparse
import sys

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('serverid', help='Server ID')
    parser.add_argument(
        "--verbose", "-v", help="Produce verbose output", action="store_true")
    cmd_args = parser.parse_args()

    s = Server(cmd_args.serverid)
    result = s.load()

    if result is not None:
        print("Cannot find the server by the ID.")
        sys.exit(1)

    if cmd_args.verbose:
        s.pprint()
    else:
        server_table = PrettyTable(["Field", "Attribute"])
        server_table.add_row(["Server ID", s.server_id])
        server_table.add_row(["Name", s.name])
        server_table.add_row(
            ["Machine Image ID", s.machine_image['machine_image_id']])
        server_table.add_row(
            ["Machine Image Name",
             s.machine_image['name'] if hasattr(s, 'machine_image_name') else None])
        server_table.add_row(["Architecture", s.architecture])
        server_table.add_row(["Product Size",
                              s.provider_product_id if hasattr(s,'provider_product_id') else None])
        if hasattr(s, 'public_ip_address'):
            server_table.add_row(["Public IP Address", s.public_ip_address])
        elif hasattr(s, 'public_ip_addresses'):
            server_table.add_row(
                ["Public IP Address", ",".join(s.public_ip_addresses)])
        else:
            server_table.add_row(["Public IP Address", None])
        if hasattr(s, 'private_ip_addresses'):
            for private_ip_address in s.private_ip_addresses:
                server_table.add_row(
                    ["Private IP Address", private_ip_address])
        else:
            server_table.add_row(["Private IP Address", None])
        server_table.add_row(
            ["Datacenter ID", s.data_center['data_center_id']])
        server_table.add_row(["Datacenter Name",
                              s.data_center['name'] if hasattr(s.data_center,'name') else None])
        server_table.add_row(["Budget ID", s.budget if hasattr(s,'budget') else None])
        if hasattr(s, 'owning_user'):
            server_table.add_row(["Owning User ID", s.owning_user['user_id']])

            if hasattr(s.owning_user, 'alpha_name'):
                server_table.add_row(
                    ["Owning User Name", s.owning_user['alpha_name']])
            else:
                server_table.add_row(["Owning User Name", None])

            if hasattr(s.owning_user, 'email'):
                server_table.add_row(
                    ["Owning User Email", s.owning_user['email']])
            else:
                server_table.add_row(["Owning User Email", None])
        else:
            server_table.add_row(["Owning User ID", None])
            server_table.add_row(["Owning User Name", None])
            server_table.add_row(["Owning User Email", None])

        if hasattr(s, 'owning_groups'):
            server_table.add_row(
                ["Owning Group ID",
                 s.owning_groups[0]['group_id'] if hasattr(s.owning_groups[0],'group_id') else None])
            server_table.add_row(
                ["Owning Group Name",
                 s.owning_groups[0]['name'] if hasattr(s.owning_groups[0],'name') else None])
        else:
            server_table.add_row(["Owning Group ID", None])
            server_table.add_row(["Owning Group Name", None])
        server_table.add_row(["Start Date", s.start_date])
        server_table.add_row(["Description", s.description])
        server_table.add_row(["Agent Version", s.agent_version])
        server_table.add_row(["Status", s.status])
        server_table.align['Field'] = 'l'
        server_table.align['Attribute'] = 'l'
        print(server_table)
