#!/usr/bin/perl -w
#
# ecaccess-file-mdelete: Delete Multiple ECaccess Files at once
#
# Laurent.Gougeon@ecmwf.int - 2010-10-15

use ECMWF::ECaccess;
use Getopt::Long;
use Pod::Usage;
use MIME::Base64;
use Term::Prompt;
use Number::Bytes::Human qw(format_bytes);

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

pod2usage( -noperldoc => 1, -exit => 1, verbose => 1 ) if !GetOptions(
	\%opt,
	qw(
	  force
	  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} );
pod2usage( -noperldoc => 1, -exit => 1, verbose => 0, -msg => "No target-ecaccess-files specified!\n" ) if not(@ARGV);

# 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();

# Process all source Files from the command-line
foreach (@ARGV) {
	my $sourceFiles = $_;

	# Get the list of Files to download
	my $files = $controlChannel->getDirList( $token, $sourceFiles );

	# Delete each File
	foreach my $file ( $files->valueof('//getDirListResponse/return') ) {

		# Set source filename
		my $source = $file->{domain} . "/" . $file->{name};

		# Do we delete this file? (don't process directories)
		if ( not( substr( $file->{permissions}, 0, 1 ) eq 'd' ) && $file->{size} >= '0' && ( $opt{force} || &prompt( "y", "Delete " . $source, "y/n", "y" ) ) )
		{
			print "Deleting " . $source . " (" . ( format_bytes( $file->{size} ) ) . ") ...\n";

			# Delete the source file
			$controlChannel->deleteFile( $token, $source, SOAP::Data->type( boolean => 'true' ) );
		}
	}
}

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

__END__

=head1 NAME

ecaccess-file-mdelete - Delete Multiple ECaccess Files at once

=head1 SYNOPSIS

B<ecaccess-file-mdelete -version|-help|-manual>

B<ecaccess-file-mdelete [-debug] [-force]> I<target-ecaccess-file> B<[>I<...>B<]>

=head1 DESCRIPTION

Allow deleting Multiple ECaccess Files at once.

Each I<target-ecaccess-file> is in the form [domain:][/user-id/]path. Please read the "Shell commands -> File Management"
section of the "ecaccess" guide for more information on the ECaccess File System.

=head1 ARGUMENTS

=over 8

=item I<target-ecaccess-file> B<[>I<...>B<]>

The name(s) of the ECaccess File(s) to delete.

=back

=head1 OPTIONS

=over 8

=item B<-force>

Overrides the interactive mode and delete each file without prompting.

=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-file-mdelete -force> I<'home:/xyz/bin/*.bin'>

Delete the I<*.bin> Files in the $HOME/bin directory of the user xyz without prompting.

=head1 SEE ALSO

B<ecaccess-file-delete>, B<ecaccess-file-get>, B<ecaccess-file-mget>, B<ecaccess-file-modtime>, B<ecaccess-file-mput>,
B<ecaccess-file-rmdir>, B<ecaccess-file-copy>, B<ecaccess-file-dir>, B<ecaccess-file-chmod>, B<ecaccess-file-mkdir>,
B<ecaccess-file-move>, B<ecaccess-file-put>, B<ecaccess-file-size> and B<ecaccess>.

=cut
