#!/usr/bin/perl -w
use strict;
use warnings;
use File::Basename qw(dirname);
use Cwd qw(abs_path);
use JSON;
use Data::Dumper;

our %opts = (
    'managedobject' => {
        type => "=s",
        help => "Managed object type: ClusterComputeResource, Datacenter, HostSystem or VirtualMachine",
        required => 1
    }
);

sub warm_up_libs {
	use lib sprintf(
	    "%s/../../lib",
	    dirname(abs_path($0))
	);
	use OpMon::VMwareConnection;
}

sub main {
	my $datacenters;
	my $conn;
	my @views;
	my $ret;
	my $opt;

	warm_up_libs();
	Opts::add_options(%opts);
	Opts::parse();
	Opts::validate();

	eval {
		$conn = VMwareConnection->new();
		$conn->connect();
		$datacenters = $conn->get_views(
		    Opts::get_option('managedobject')
		);
		foreach(@$datacenters) {
			$opt = {};
			$opt->{key} = $_->{name};
			$opt->{value} = $_->{name};
			push(@views, $opt);
		}

	};
	if ($@) {
		$@ =~ s/[\n\r-]//g;

		$ret->{success} = 0;
		$ret->{message} = $@;
		$conn->disconnect();
		print encode_json($ret);
		exit 1;
	}

	$conn->disconnect();
	$ret->{success} = 1;
	$ret->{data} = \@views;

	print encode_json($ret);
	exit 0;
}

main();

# usage example:
#
# ./list_managed_objects.pl                 \
#           --portnumber 2000               \
#           --username opuser               \
#           --password 'pass'               \
#           --managedobject VirtualMachine

