#!/usr/bin/perl
#
# $Id$
#
use strict;
use lib qw(/usr/share/benno-tools-lib);
use Getopt::Std;
use File::Find;
use Benno;
use Benno::Boxstate;
use Benno::Mailfile;

my $VERSION = '2.8.0';


my %opts;
getopts('Vhdsve:m:r:R:',\%opts);

my $exportdir   = $opts{e}  || '/srv/benno/inbox';
my $repodir     = $opts{r};
my $verbose     = $opts{v};
my $dry_run     = $opts{d};
my $skipdefect  = $opts{s};
my $runuser     = $opts{R}  || 'benno';

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

help_exit() if $opts{h};
help_exit() if not ($repodir);

Benno->run_as($runuser);

my $boxstate = $repodir.'/boxstate.xml';
my $Boxstate = new Benno::Boxstate($boxstate);
my $repodir = $Boxstate->repodir;

foreach my $Box ($Boxstate->get_boxes){
    $box::id     = $Box->id;
    $export::dir = $exportdir;
    my $boxdir = $repodir.'/'.$box::id;
    find({wanted => \&process_box, no_chdir => 1}, $boxdir);
}



### SUBS ###########################################################
sub process_box
{
    my $filename = $File::Find::name;

    -d $filename             && return undef;
    $filename =~ m!/journal! && return undef;

    my $BennoMailfile;
    eval {
        $BennoMailfile = new Benno::Mailfile($box::id,$File::Find::name);
    };
    if ($@) {
        print STDERR "WARN $File::Find::name: $@";
        return;
    }

    print 'Process '.$BennoMailfile->filename."\n" if $verbose;

    my $exportfile;
    if (!$dry_run) {
        eval {
            $exportfile = $BennoMailfile->export($export::dir);
        };
        if ($@) {
            print STDERR $@;
            return;
        }
        print "Export $exportfile \n" if $verbose;
    }
}



### help_exit()
sub help_exit
{
    print "Usage: $0 -r <repodir> [-e <exportdir>] [-d] [-R <userid>] [-s] [-v]\n";
    print "\n";
    print "    -r <repodir> repo directory (example: /srv/benno/archive/repo)\n";
    print "    -e           export directory (/srv/benno/inbox)\n";
    print "    -d           dry run\n";
    print "    -R <userid>  skip defective marked mails\n";
    print "    -s           skip defective marked mails\n";
    print "    -v           verbose\n";
    print "    -V           print version\n";
    print "\n";
    
    exit 1;
}
