package Razor2::Preproc::Manager;
use Razor2::Preproc::deBase64;
use Razor2::Preproc::deQP;
use Razor2::Preproc::deHTMLxs;
use Razor2::Preproc::deHTML;
use Razor2::Preproc::deNewline;
use Razor2::Preproc::deHTML_comment;
use Data::Dumper;
use strict;

sub new  {

    my ($class, %args) = @_;

    my %self = ();
    
    $self{deBase64}         = new Razor2::Preproc::deBase64  unless exists $args{no_deBase64};
    $self{deQP}             = new Razor2::Preproc::deQP      unless exists $args{no_deQP};
    $self{deHTML}           = new Razor2::Preproc::deHTMLxs  unless exists $args{no_deHTML};
    $self{deNewline}        = new Razor2::Preproc::deNewline unless exists $args{no_deNewline}; 
    $self{deHTML_comment}   = new Razor2::Preproc::deHTML_comment if exists $args{deHTML_comment};
    $self{rm}               = $args{RM};

    return bless \%self, $class;

}

#
# $bodyref must be Headers\n\r*\nBody
# for this to work.   Cleaned ref to Body returned.
# 
sub preproc {

    my ($self, $bodyref, $dolength) = @_;
    my $lengths = { '1_orig' => length($$bodyref) } if $dolength;

    #-- $self->{rm}->{log}->log(12, "before_deBase64:");
    if (exists $$self{deBase64} && $self->{deBase64}->isit($bodyref)) { 
        $self->{deBase64}->doit($bodyref);
    }
    #-- $self->{rm}->{log}->log(12, "after_deBase64:");

    #$self->log2file($bodyref, "preproc.afta.debase64");
    $lengths->{'2_after_deBase64'} = length($$bodyref) if $dolength;

    #-- $self->{rm}->{log}->log(12, "before_deQP:");
    my $isQP;
    if (exists $$self{deQP} && ($isQP = $self->{deQP}->isit($bodyref))) { 
        $self->{deQP}->doit($bodyref);
    }
    #-- $self->{rm}->{log}->log(12, "after_deQP:");

    #$self->log2file($bodyref, "preproc.afta.deQP.$isQP");
    $lengths->{'3_after_deQP'} = length($$bodyref) if $dolength;

    #-- $self->{rm}->{log}->log(12, "before_deHTML:");
    if (exists $$self{deHTML} && $self->{deHTML}->isit($bodyref)) { 
        $self->{deHTML}->doit($bodyref);
    }
    #-- $self->{rm}->{log}->log(12, "after_deHTML:");

    if (exists $$self{deHTML_comment} && $self->{deHTML_comment}->isit($bodyref)) { 
        $self->{deHTML_comment}->doit($bodyref);
    }
 
    #-- $self->{rm}->{log}->log(12, "before_deNewline:");
    if (exists $$self{deNewline}) { 
        $self->{deNewline}->doit($bodyref);
    }
    #-- $self->{rm}->{log}->log(12, "after_deNewline:");
    #$self->log2file($bodyref, "preproc.afta.deHTML");
    $lengths->{'4_after_deHTML'} = length($$bodyref) if $dolength;

    my ($hdr, $body) = split /\n\r*\n/, $$bodyref, 2;

    $$bodyref = $body;
    $lengths->{'5_after_header_removal'} = length($$bodyref) if $dolength;

    return $lengths;

}


sub log2file {
    my ($self, $msgref, $mailid) = @_;
    my $len = length($$msgref);
    my $fn = "/tmp/.razor.debug.msg.$$.$mailid";
    if (open OUT, ">$fn") {
        print OUT $$msgref;
        close OUT;
    } else {
    }
}


1;


