#!/usr/bin/env python

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

if __name__ == '__main__':
	parser = argparse.ArgumentParser()
	parser.add_argument('--all', '-a', help='List all servers.', action="store_true")
	parser.add_argument('--serverid', '-s', help='Server ID')
	cmd_args = parser.parse_args()
	
	if cmd_args.all or cmd_args.serverid:
		if cmd_args.serverid:
			servers = [ Server(cmd_args.serverid) ]
		else:
			servers = Server.all()

		server_table = PrettyTable(["ID", "Cloud", "Region", "Provider ID", "Server Name", "Owner", "Status", "Termination"])
	
		cur = str(datetime.utcnow())
		curtime = datetime.strptime(cur, '%Y-%m-%d %H:%M:%S.%f')
		
		for server in servers:
			try:
				owning_user=server.owning_user['email']
			except AttributeError:
				owning_user="Not Found"
	
			try:
				terminate_after=server.terminate_after
				terminate_after_seconds=datetime.strptime(terminate_after.split("+")[0], '%Y-%m-%dT%H:%M:%S.%f')
				diff = round(((terminate_after_seconds - curtime).total_seconds() / 60) / 60, 2)
				newdiff = str(diff)+" hours"
			except AttributeError:
				terminate_after=None
				newdiff = "Never"
	
			#if terminate_after is not None:
			server_table.add_row([server.server_id, server.cloud['cloud_provider_name'], server.region['name'], server.provider_id, server.name, owning_user, server.status, newdiff])

		print(server_table)
	else:
		parser.print_help()
		sys.exit(1)	
