#!/usr/bin/env python

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

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--productid', '-p', help="Provider's product ID such as m1.large")
    parser.add_argument('--machineimage', '-m', help='Machine image ID')
    parser.add_argument('--datacenter', '-d', help='Data Center ID')
    parser.add_argument('--description', '-D', help='Description')
    parser.add_argument('--name', '-n', help='Server Name')
    parser.add_argument('--budgetid', '-b', help='Budget ID')
    parser.add_argument('--keypair', '-k', help='Keypair Name')
    parser.add_argument('--vlan', '-v', help='VLAN')
    parser.add_argument('--userdata', '-u',
                        help='User data that will be added to the metadata '
                             'inside of the VM.  If the value starts with'
                             ' @ the data will be read from a file at the '
                             'path which follows the @.')

    cmd_args = parser.parse_args()

    if (cmd_args.productid is None or cmd_args.machineimage is None or
        cmd_args.name is None or cmd_args.datacenter is None or 
        cmd_args.description is None):
        parser.print_help()
        sys.exit(1)

    new_server = Server()
    new_server.provider_product_id = cmd_args.productid
    new_server.machine_image = cmd_args.machineimage
    new_server.data_center = cmd_args.datacenter
    new_server.description = cmd_args.description
    new_server.name = cmd_args.name

    if cmd_args.vlan is not None:
        new_server.vlan = cmd_args.vlan
    if cmd_args.budgetid is not None:
        new_server.budget = cmd_args.budgetid
    new_server.keypair = cmd_args.keypair

    if cmd_args.userdata is not None:
        if cmd_args.userdata.startswith('@'):
            ud_path = cmd_args.userdata[1:]
            with open(ud_path, 'r') as fptr:
               new_server.userData = fptr.read()
        else:
            new_server.userData = cmd_args.userdata

    result = new_server.launch()

    print(result)
