#!/usr/bin/perl

## make sure we can run this from bims via sudo from pubmed
use lib qw(/home/ernad/ernad/perl /home/ernad/usr/share/perl /home/ernad/lib/perl);

use strict;
use warnings;

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

use Ernad::Args;
use Ernad::Adverts;
use Ernad::Constant;
use Ernad::Common;
use Ernad::Dates;
use Ernad::Erimp;
use Ernad::Issues;
use Ernad::Namf;
use Ernad::Notify;
use Ernad::Presort::Seeds;
use Ernad::Presort::Dates;
use Ernad::Presort;
use Krichel::File;

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

my $issuedate=$ARGV[0];
if(not Ernad::Dates::is($issuedate)) {
  print "Your issuedate $issuedate is not a date.\n";
  exit;
}


## build cache for the selection screen
my $cache_selection_screen= sub {
  ## this is handed by the caller
  my $repcode=shift;
  ## reset key
  $e->{'repcode'}='';
  $e->{'issuedate'}='';
  $e->{'namf'}='';
  my $rerc=$e->{'report'}->{$repcode};
  $e->{'repcode'}=$repcode;
  ## global variable
  $e->{'issuedate'}=$issuedate;
  $e->{'r'}->load($repcode);
  $rerc=$e->{'report'}->{$repcode};

  my $cache_dir=$e->{'report'}->{$repcode}->{'dir'}->{'cache'} //
    confess "I need the cache_dir defined here.";
  my $cc_dir=$cache_dir.'/'.$e->{'const'}->{'created_dir'};
  my $cache_file=$cc_dir."/$issuedate.html";
  &Krichel::File::prepare($cache_file);
  ## fixme:: add some checks of it being newer that the namf file
  ## fixme ... I just made this up
  my $params= {'back_from' => "'source'",
               'stage' => "'created'",
               'Report' => "'$repcode'",
               'repcode' => "'$repcode'"};
  my $ps_dir=$rerc->{'dir'}->{'presorted'} // confess "Where is my presorted_dir?";
  ## ps_file file first
  #my $ps_file=$ps_dir.'/'.&Ernad::Common::get_most_recent_rif($ps_dir,'lax',$issuedate);
  my $ps_bana=$e->{'d'}->most_recent_rif($ps_dir,'lax',$issuedate);
  if(not $ps_bana) {
    $e->echo(__LINE__,"I can not cache the selection screen for $repcode.");
    return 0;
  }
  my $ps_file=$ps_dir.'/'.$ps_bana;
  ## if this does not exist,
  if(not -f $ps_file) {
    $ps_file=$e->{'d'}->most_recent_rif($ps_dir,'lax',$issuedate);
  }
  if(not -f $ps_file) {
    $e->echo(__LINE__,"I don't see your ps_file $ps_file");
  }
  if(not $e->{'d'}->most_recent_rif($ps_dir,'lax',$issuedate)) {
    $e->echo(__LINE__,"I have no rif in $ps_dir and issuedate $issuedate");
    return 0;
  }
  #if(not $e->{'d'}->most_recent_rif($ps_dir,'lax',$issuedate)) {
  #  $e->echo(__LINE__,"I have no rif in $ps_dir and issuedate $issuedate");
  #}
  if($ps_file) {
    #if(not &Ernad::Files::does_file_need_renewal($cache_file,$ps_file)) {
    #  $e->echo(__LINE__,"$cache_file needs no renewing over $ps_file.");
    #  return 0;
    #}
    if(-d $ps_file) {
      return 0;
    }
    if(not $ps_file=~m|$issuedate|) {
      $e->echo(__LINE__,"I found '$ps_file'. It does not match my issuedate '$issuedate'.");
      return 0;
    }
    $e->echo(__LINE__,"I found $ps_file. I start to transform papers_screen...");
    my $doc=$e->{'t'}->transform_file($ps_file,'papers_screen',$params);
    $doc->toFile($cache_file);
    $e->echo(__LINE__,"I'm wrote $cache_file.");
    return 1;
  }
  $e->echo(__LINE__,"I should not be here.");
};

## main call
#$e->call_on_all_reports($unleasher,$naf,$only_do_repcode);
$e->call_on_all_reports($cache_selection_screen);
#$e->{'o'}->call_by_lafise($unleasher,$naf,$only_do_repcode);
#$e->{'o'}->call_on_all_reports($cache_selection_screen,$naf);

exit;

## make this work with NEP to create an unsorted report
__END__

1;
