#!/usr/bin/perl -w
#
# ecaccess-certificate-list: List Available Operations
#
# Laurent.Gougeon@ecmwf.int - 2010-10-15

use ECMWF::ECaccess;
use Getopt::Long;
use Pod::Usage;
use Term::ReadKey;

my %opt = ( version => 0, help => 0, manual => 0, debug => 0 );

pod2usage( -noperldoc => 1, -exit => 1, verbose => 1 ) if !GetOptions(
	\%opt,
	qw(
	  version
	  help|?
	  manual
	  debug
	  )
);

# Display version if requested
die ECMWF::ECaccess->VERSION . "\n" if ( $opt{version} );

pod2usage( -noperldoc => 1, -exit => 1, verbose => 1 ) if ( $opt{help} );
pod2usage( -noperldoc => 1, -exit => 1, verbose => 2 ) if ( $opt{manual} );

my $operationname = $ARGV[0];

# Create the ECaccess Controler
my $ecaccess = ECMWF::ECaccess->new();
$ecaccess->setDebug( $opt{debug} );

# Get the Token (using the Certificate in $HOME)
my $token = $ecaccess->getToken();

# Get the Control Channel
my $controlChannel = $ecaccess->getControlChannel();

if ( not($operationname) ) {

	# Get the list of operations
	my $operations = $controlChannel->getOperationList($token);

	# Display the information for each operation
	foreach $operation ( $operations->valueof('//getOperationListResponse/return') ) {
		printf "%-20s %-8s %-20s %-20s\n", $operation->{name}, $operation->{duration}, $operation->{endDate}, $operation->{comment};
	}
}
else {

	# Get the information for the specified operation
	$operation = $controlChannel->getOperation( $token, $operationname )->valueof('//getOperationResponse/return');
	print "   Operation name: ", $operation->{name},      "\n";
	print "Standard Validity: ", $operation->{standard},  "\n";
	print "    Your Validity: ", $operation->{duration},  "\n";
	print "       Start Date: ", $operation->{startDate}, "\n";
	print "         End Date: ", $operation->{endDate},   "\n";
	print "          Comment: ", $operation->{comment},   "\n";
}

# Logout
$ecaccess->releaseToken($token);

__END__

=head1 NAME

ecaccess-certificate-list - List Available Operations

=head1 SYNOPSIS

B<ecaccess-certificate-list -version|-help|-manual>

B<ecaccess-certificate-list [-debug] [>I<operation-name>B<]>

=head1 DESCRIPTION

List all the Operations which are available with the current Certificate (the one
in your "$HOME/.eccert.crt" File). If a required Operation is expired then you should
renew your Certificate with the B<ecaccess-certificate-create> command. If you specify
an I<operation-name> on the command-line then the information for this Operation only
will be displayed.

=head1 ARGUMENTS

=over 8

=item <operation-name> (optional)

The name of the Operation to retrieve the details.

=back

=head1 OPTIONS

=over 8

=item B<-version>

Display version number and exits.

=item B<-help>

Print a brief help message and exits.

=item B<-manual>

Prints the manual page and exits.

=item B<-debug>

Display the SOAP messages exchanged.

=back

=head1 EXAMPLES

B<ecaccess-certificate-list>

List all the Operations for your certificate.

B<ecaccess-certificate-list> I<submitJob>

List all the details for the Operation I<submitJob> only.

=head1 SEE ALSO

B<ecaccess-certificate-create> and B<ecaccess>.

=cut
