#!/usr/bin/perl

use strict;
use warnings;

use Carp qw(confess);
use Data::Dumper;
use Getopt::Std;

use Ernad::Args;
#use Ernad::Indat::Report;
#use Ernad::Common;
#use Ernad::Store;
use Ernad::Erimp;

#my %o;
#&Getopt::Std::getopts('adb', \%o);
#my $do_add = $o{'a'} // 0;
#my $do_delete = $o{'d'} // 0;
##my $do_build = $o{'b'} // 0;

use IO::Compress::Gzip qw($GzipError);

our ($impna, $e, $repcode, $in_file, $issuedate);
&Ernad::Args::parse();
$e=Ernad::Erimp->new({'impna'=> $impna, 'verbose'=>3});

my $export_dir=$e->{'dir'}->{'export'};
my $reports_dir=$e->{'dir'}->{'reports'};
my $reports_dir_length=length($reports_dir)+1;

my $selog_dir="$export_dir/selog";
my $previous_out_string='';
my $previous_stage='';

for my $fufi (`find $reports_dir`) {
  chomp $fufi;
  if(not $e->{'f'}->is($fufi)) {
    next;
  }
  if($repcode and not $fufi=~m|/$repcode/|) {
    next;
  }
  my $stage=$e->{'f'}->stage($fufi);
  my $bana = substr($fufi,$reports_dir_length);
  if(substr($bana,-3) eq '.gz') {
    $bana=substr($bana,0,length($bana)-3);
  }
  my $out_fufi="$selog_dir/$bana.gz";
  ## don't do them again
  if(-f $out_fufi) {
    next;
  }
  my $out=$e->{'t'}->t($fufi,'selog');
  my $out_string="$out";
  ## a bit of pretty-printing
  $out_string=~s|>\s+</text>|/>|g;
  $out_string=~s|<item xmlns="http://ernad\.openlib\.org"|<e:item|g;
  $out_string=~s|</haspart><haspart>|\n</haspart>\n<haspart>|g;
  if($previous_out_string) {
    if($stage eq $previous_stage and $out_string eq $previous_out_string) {
      print "I skip $fufi\n";
      next;
    }
  }
  $previous_out_string=$out_string;
  $previous_stage=$stage;
  Krichel::File::prepare($out_fufi);
  my $out_file = IO::Compress::Gzip->new($out_fufi)
    or confess "Could not write to $out_fufi: $GzipError";
  print { $out_file } $out_string;
  #print "I wrote $out_fufi\n";
  $out_file->close()
}
