#!/usr/bin/perl
#
#
use strict;
use Getopt::Std;
use Sys::Syslog;
use lib qw(/usr/lib/benno-import-tools);
use Benno;
use Benno::Emlfile;
use Benno::Import::RESTClient;

my $VERSION = '2.10.3';
my $DEBUG   = $ENV{DEBUG};

my %opts;
getopts('dhvH:P:R:f:s:U:',\%opts);

my %conf = Benno->config($opts{c}) if $opts{c};

my $delete          = $opts{d};
my $jwt_secret      = $opts{s} || $conf{jwt_secret};
my $mailfile        = $opts{f};
my $noverifycert    = $opts{n} || $conf{noverifycert};
my $archiveurl      = $opts{U} || $conf{archiveurl};
my $resthost        = $opts{H} || $conf{resthost};
my $restport        = $opts{P} || $conf{restport}       || 21543;
my $runuser         = $opts{R} || $conf{runuser}        || 'benno';
my $verbose         = $opts{v};


if ($opts{V}) {
    print "benno-send2archive $VERSION\n";
    exit 0;
}

help_exit() if $opts{h};

Benno->run_as($runuser);
openlog('benno-send2archive','nowait,pid','mail');


-r $mailfile or die "Cannot read mailfile $mailfile: $!\n";

my $Emlfile = new Benno::Emlfile($mailfile);

print "Load $mailfile\n" if $verbose;

my $uri;
if ($archiveurl) {
    $uri = $archiveurl;
}
else {
    $uri = 'https://'.$resthost.':'.$restport.'/rest/archive';
}
my $RC = Benno::Import::RESTClient->new($uri);

my $ret;
eval {
    $RC->auth_bearer($jwt_secret,$Emlfile->digest());
    $ret = $RC->upload_mail($Emlfile->content());
    syslog('LOG_INFO',$ret);
    print $ret."\n" if (-t STDIN);
    unlink $mailfile if $delete;
};
if ($@) {
    my $err = $@;
    syslog('LOG_ERR',$err);
    print STDERR $err;
    exit 1;
}

### SUBS ###
### help_exit()
sub help_exit
{
    my $msg = shift;

    if ($msg) {
        print $msg,"\n\n";
    }

    print "Usage: $0 [-c <configfile>] [params]\n";
    print "\n";
    print "    -c <config>    config file\n";
    print "    -U <URL>       full archive url (https://<hostname>:<port>/rest/archive)\n";
    print "    -H <host>      Benno Import REST host\n";
    print "    -P <port>      Benno Import REST port (21543)\n";
    print "    -s <secret>    Shared JWT token secret\n";
    print "    -d             Delete file after successful upload\n";
    print "    -f <file>      File to upload\n";
    print "\n";
    print "    -R <user>      run as user (default: benno)\n";
    print "    -v             verbose\n";
    print "    -V             print version\n";
    print "\n";
    
    exit 1;
}

1; ### EOP ###
