#!/usr/bin/perl

use strict;
use warnings;

use File::Basename;
use Net::Amazon::S3;
use Text::CSV::Easy(qw/csv_build/);

use lib '/app/tools/common/lib';
use Common::Session;
use Common::Amazon::Config;

my ( $aws_access_key_id, $aws_secret_access_key, $region ) = get_aws_creds('orch-transfer');

my ( $opt, $usage ) = clopt(
    [ 'bucket|b=s'    => 'AWS S3 bucket to list',           { 'required' => 1 } ],
    [ 'directory|d=s' => 'Directory under bucket to list ', { 'default'  => '/' } ],
    [ 'help|?|h'      => "print usage message and exit" ]
);
if ( $opt->help ) {
    print $usage->text;
    exit 0;
}

my $s3 = Net::Amazon::S3->new(
    'aws_access_key_id'     => $aws_access_key_id,
    'aws_secret_access_key' => $aws_secret_access_key,
    'retry'                 => 1,
);

my $bucket   = $s3->bucket( $opt->bucket );
my $list     = $bucket->list( { 'marker' => $opt->directory } );
my $iterator = scalar @{ $list->{'keys'} };
while ( $iterator > 0 ) {
    foreach my $href ( @{ $list->{'keys'} } ) {
        my $path = $href->{'key'};
        my ($pdir) = File::Basename::dirname($path) =~ m!.*/(.*)$!;
        my $base = File::Basename::basename($path);

        my ($ext) = $base =~ m/.*\.(.*)$/;
        $base = File::Basename::basename( $path, ".$ext" ) if defined $ext;

        $href->{'last_modified'} =~ s/^(.*?)T(.*?)\..*Z/$1 $2/;

        my $line = csv_build( ( $opt->bucket, $path, $pdir, $base, $ext, $href->{'etag'}, $href->{'size'}, $href->{'last_modified'} ) );
        print "\\N,$line\n";

    }
    my $marker = $list->{'keys'}->[ ( $iterator - 1 ) ]->{'key'};
    $list = $bucket->list( { 'marker' => $marker } );
    $iterator = scalar @{ $list->{'keys'} };
}
