#!/usr/bin/perl

use strict;
use warnings;

use Carp qw(confess);
use Data::Dumper;
use Date::Parse;

## a local package
use Mail::Exim::MainLogParser;

use Ernad::Args;
use Ernad::Erimp;
use Ernad::Dates;
#use Krichel::File;


## should be in Ernad::System
sub isatty() {
  no autodie;
  my $tty;
  if(open($tty, '+<', '/dev/tty')) {
    close $tty;
    return 1;
  }
  return 0;
}

our ($impna, $e, $repcode, $in_file, $issuedate);
&Ernad::Args::parse();
if(not $impna) {
  print "I need an impna\n";
  exit;
}
if(not $issuedate) {
  $issuedate=&Ernad::Dates::today();
}

$e=Ernad::Erimp->new({'impna'=> $impna, 'verbose'=>3});

if($e->{'testing'}) {
  print "You should not run me on your testing machine.\n";
  exit;
}

my @log_lines=`cat /var/log/exim4/mainlog`;
push(@log_lines,`cat /var/log/exim4/mainlog.1`);

## check teasers
my $exlog = new Mail::Exim::MainLogParser;
my $missing={};
my $mail_files={};
foreach my $repcode (@{$e->{'r'}->list()}) {
  $missing->{$repcode}='true';
  $e->{'r'}->load($repcode);
  my $rerc=$e->{'report'}->{$repcode};
  my $email=lc($rerc->{'editor_email'});
  if(lc($email) eq 'krichel'.'@'.'openlib.org') {
    delete $missing->{$repcode};
    next;
  }
  my $notify_dir=$rerc->{'dir'}->{'notify'};
  if(not -d $notify_dir) {
    print("I don't see $notify_dir\n");
    #confess "I don't see $notify_dir";
  }
  #my $glob="$notify_dir/$issuedate".'.mail';
  #print("glob is " . $glob . "\n");
  #my @files=glob($glob);
  #print Dumper @files;
  #exit;
  #print("files is " . Dumper @files . "\n");
  #if(not scalar @files) {
  #  next;
  #}
  #exit;
  #my $notify_file=pop(@files);
  my $notify_file="$notify_dir/$issuedate".'.mail';
  $mail_files->{$repcode}=$notify_file;
  if(not -f $notify_file) {
    print("I don't see $notify_file\n");
    next;
  }
  my $file_tist=&Ernad::Dates::mtime($notify_file);
  foreach my $log_line (@log_lines) {
    chomp $log_line;
    my $entry=$exlog->parse($log_line);
    my $address=$entry->{'address'} or next;
    if(not $address=~m|$email|i) {
      next;
    }
    if(lc($address) eq 'krichel'.'@'.'openlib.org') {
      next;
    }
    my $date_time = $entry->{'date'} . ' ' . $entry->{'time'};
    my $mail_tist = str2time($date_time);
    ## old stuff
    if($file_tist > $mail_tist) {
      next;
    }
    my $diff = $mail_tist - $file_tist;
    if($diff < 60) {
      delete $missing->{$repcode};
    }
    elsif($missing->{$repcode}) {
      if($missing->{$repcode} eq 'true') {
        $missing->{$repcode}=$diff;
      }
      elsif($missing->{$repcode} > $diff) {
        $missing->{$repcode}=$diff;
      }
    }
  }
}

if(isatty()) {
  print Dumper $missing;
}

foreach my $repcode (keys %$missing) {
  if($missing->{$repcode} ne 'true') {
    next;
  }
  my $file=$mail_files->{$repcode};
  print "$file\n";
  my $sys="/bin/cat $file | /usr/sbin/exim4 -t";
  print "$sys\n";
  die $sys;
  system($sys);
}


__END__;
