#!/usr/bin/perl

## make sure we can run this from the web interface
use lib qw(/home/ernad/ernad/perl /home/ernad/usr/share/perl /home/ernad/lib/perl);

use strict;
use warnings;

use Data::Dumper;
use Getopt::Std;
use List::Util qw(shuffle);
use Sys::RunAlone;

use Ernad::Learn;
use Ernad::Learn::Dokli;
use Ernad::Notify;

## options into %o;
my %o;
Getopt::Std::getopts("xv:", \%o);
## -x to extend for non-public reports
## -v set verbosity
my $verbose=$o{'v'} // 2;

## arguments
my $impna = $ARGV[0] // '';
if(not $impna) {
  print "I need an impna.";
  exit;
}

## do only one repcode
my $only_do_repcode=$ARGV[1] // '';
our $e=Ernad::Erimp->new({'impna' => $impna,
                          'verbose'=> $verbose});

## check for a holiday
my $today=&Ernad::Dates::today();
my $holiday_regex=$e->{'conf'}->{'holidays'} // '';
if($holiday_regex and $today=~m|$holiday_regex|) {
  $e->echo(__LINE__,"Today, $today, is a holiday. I relax.");
  exit;
}

my $l=Ernad::Learn->new({'impna' => $impna,
                         'e'=>$e,
                         'verbose' => 2});

## if we model, we should do it before presorting
## otherwise presort first, then make the dokli
## this parameter does no longer exist
#if(defined($e->{'conf'}->{'model_at_release'})
#   and $e->{'conf'}->{'model_at_release'}) {
#  &make_dokli();
#  $l->model_all_reports();
#  &presort();
#}
#else {
&presort();
if(not $only_do_repcode) {
  &make_dokli();
}
#}

my $restart_delivery_server=$e->{'conf'}->{'restart_delivery_server'} // '';
if($restart_delivery_server) {
  system($restart_delivery_server);
}


## do all presorting
sub presort {
  ## curpu first, then curse, if -x
  #my @repcodes=shuffle $e->get_curpu_repcodes();
  #if($o{'x'}) {
  #  push(@repcodes,shuffle $e->get_curse_repcodes());
  #}
  my @repcodes=shuffle $e->list_repcodes();
  foreach my $repcode (@repcodes) {
    ## This is a temporary check to skip the allport
    if(not $e->{'conf'}) {
      die "I need this here.";
    }
    ## this is temporary, as list_repcodes may have the allport
    if($e->{'conf'}->{'allport_repcode'} and $repcode eq $e->{'conf'}->{'allport_repcode'}) {
      next;
    }
    if($only_do_repcode and $repcode ne $only_do_repcode) {
      next;
    }
    if($e->{'r'}) {
      $e->{'r'}->load($repcode);
    }
    my $ps_rif=$l->presort_ahead($repcode) or next;
    ## check that we have an editor
    my $editor=$e->{'report'}->{$repcode}->{'xml'}->{'editor'} // next;
    ## then notify
    &Ernad::Notify::notify($e,$ps_rif);
  }
}

sub make_dokli {
  ## prepare new dokli
  my $d=Ernad::Learn::Dokli->new({'impna' => $impna,
                                  'verbose' => 1,
                                  'e'=>$e});
  my $dokli_file=$d->set_dokli();
  if(not $dokli_file) {
    $d->build_dokli();
    my $dokli_file=$d->set_dokli();
  }
}

__END__;
