#!/usr/bin/perl

use strict;
use warnings;

use Carp qw(confess);
use File::Basename;
use List::Util qw(shuffle);

use Data::Dumper;
use Sys::RunAlone;

use Ernad::Erimp;

my $impna = $ARGV[0] // die "no impna";

my $only_repcode = $ARGV[1] // '';

my $e=Ernad::Erimp->new({'impna' => $impna,
                         'verbose' => 1});
my $test=0;

my $allport=$e->get_allport_repcode();

## this needs to go somewhere else
my $learn_dir= $e->{'dir'}->{'learn'};
my $mocla_dir= $e->{'dir'}->{'learn'}.'/mocla';
my $dokli_dir= $e->{'dir'}->{'learn'}.'/dokli';
my $exfit_dir= $e->{'dir'}->{'learn'}.'/exfit';
my $fidek_dir= $e->{'dir'}->{'learn'}.'/fidek';
my $lisig_dir= $e->{'dir'}->{'learn'}.'/lisig';
my $isink_dir= $e->{'dir'}->{'learn'}.'/isink';

## build minimum time should be a year ago
my $now=time;
my $min_time=$now-(365*24*60*60);

## should really be done via erimp
my @reports;
if($only_repcode) {
  $reports[0]=$only_repcode;
}
else {
  @reports=shuffle (`ls $mocla_dir`);
}

my $times_to_keep;
## times_to_keep are set in this loop
my $all_times_to_keep;
foreach my $report (@reports) {
  chomp $report;
  my $found_times=&find_times_to_keep("$mocla_dir/$report");
  &delete_if_not_of_time("$mocla_dir/$report",$found_times);
  foreach my $time (keys %$found_times) {
    if(not $time) {
      next;
    }
    $all_times_to_keep->{$time}=1;
  }
  ###$times_to_keep=&work_on_mocla($report,$times_to_keep);
  ###$times_to_keep=&work_on_mocla($report,$times_to_keep);
}

if($test) {
  print Dumper $all_times_to_keep;
}

#delete_if_not_of_time("$exfit_dir/$allport",$all_times_to_keep);
delete_if_not_of_time("$dokli_dir/$allport",$all_times_to_keep);
delete_if_not_of_time("$fidek_dir/$allport",$all_times_to_keep);

exit;

sub delete_if_not_of_time {
  my $dir=shift // confess "I need a directory here.";
  if(not $dir) {
    die "I need a directory here.";
  }
  if(not -d $dir) {
    die "I can't open the directory '$dir'.";
  }
  my $times=shift //  return;
  opendir( my $ddir, $dir) or die "Error: can't open dir $dir";
  my $file;
  while ($file = readdir $ddir ) {
    #skipping "." and ".."
    if (($file eq ".") or ($file eq "..")) {
      next;
    }
    my $fufi="$dir/$file";
    if(not $file=~m|_(\d+)[_\.]|) {
      if($test) {
        print "I skip $dir/$file\n";
      }
    }
    my $time=$1;
    if(not $time) {
      if($test) {
        print "I don't see a time on $fufi\n";
      }
      next;
    }
    if($times->{$time}) {
      if($test) {
        print "I keep $fufi.\n";
      }
      next;
    }
    if($test) {
      print "I need to remove $fufi\n";
    }
    else {
      unlink $fufi;
    }
  }
}

sub find_times_to_keep {
  my $dir=shift // '';
  my $limit=shift // 2;
  if(not $dir) {
    confess "I need a directory here.";
  }
  if(not -d $dir) {
    confess "$dir is not a directory.";
  }
  opendir( my $ddir, $dir) or die "Error: can't open dir $dir";
  my $file;
  my $times;
  while ($file = readdir $ddir ) {
    #skipping "." and ".."
    if (($file eq ".") or ($file eq "..")) {
      next;
    }
    if(not $file=~m|_(\d+)\.|) {
      if($test) {
        print "I skip $dir/$file\n";
      }
    }
    $times->{$1}=1;
  }
  my @the_times=sort {$b <=> $a} keys %$times;
  my $out;
  my $count=0;
  while($count<$limit) {
    if(not $the_times[$count]) {
      last;
    }
    $out->{$the_times[$count]}=1;
    $count++;
  }
  return $out;
}


exit;


__END__;
