#!/usr/bin/perl

use warnings;
use strict;

use Storable      qw/nstore_fd/;
use POSIX         qw/ctime/;
use Mail::Message ();

sub run_test($$$);
my $resend_cmd = './resend';

my ($mbox) = @ARGV ? @ARGV : ('/tmp/mangle.mbox');
unlink $mbox;

my $list_info =
  { message_footer  => '**add a foot**'
  , message_fronter => '**add a head**'
  };
my $account   = {};

run_test '00simple.msg', $list_info, $account;
run_test '01multipart.msg', $list_info, $account;
run_test '02plainhtml.msg', $list_info, $account;

print "Check output in $mbox\n";
exit 0;


#
#### run_test
#

sub run_test($$$)
{   my ($msgfn, $list_info, $account) = @_;

    open IN, '<', $msgfn
        or die "cannot read from $msgfn: $!\n";

    my $msg = Mail::Message->read(\*IN)
        or die "cannot read message from $msgfn: $!\n";

    close IN;

    open MBOX, '>>', $mbox
        or die "cannot write to mbox '$mbox': $!\n";
    print MBOX "From <test> ".ctime(time);
    close MBOX;

    open MANGLE, "| $resend_cmd --test-mangle >> $mbox"
        or die "cannot start command '$resend_cmd': $!\n";

    my $oldfh = select MANGLE; $| = 1; select $oldfh;
    nstore_fd [$msg, $list_info, $account], \*MANGLE;

    sleep 1;

    open MBOX, '>>', $mbox
        or die "cannot write to mbox '$mbox': $!\n";
    print MBOX "\n\n";
    close MBOX;

    unless(close MANGLE)
    {   if($!) { die "error closing pipe tot $resend_cmd: $!\n" }
        else   { die "exit status of $resend_cmd: $?" }
    }
}
