#!/usr/bin/perl

use Time::Local;

sub PDY2epoch ($) {
   my $PDY = shift;

   $sec=0;
   $min=0;
   $hour=0;
   ($j,$year,$mon,$dy)=split(/(\d\d\d\d)(\d\d)(\d\d)/,$PDY);
   $mon=$mon-1;
   $timestring=timegm($sec,$min,$hour,$dy,$mon,$year);
   return $timestring;
}
sub string2epoch ($) {
   my $string = shift;

   ($j,$year,$mon,$dy,$hour,$min,$sec)=split(/(\d\d\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)/,$string);
   $mon=$mon-1;
   $timestring=timegm($sec,$min,$hour,$dy,$mon,$year);
   return $timestring;
}

sub time2sec ($) {
   my $timestring = shift;

   ($j,$year,$mon,$dy,$hour,$min,$sec)=split(/(\d\d\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)/,$timestring);
   $seconds=$hour*3600+$min*60+$sec;
   return $seconds;
}

$target_file="/nw$ENV{envir}/fix/dashboard_ntcfile.targets";

%model=();
%cyc=();
%products=();
%ncep_avg=();

%ncep_post_sec=();

$total_products=0;
open(TARGET,$target_file);
while(<TARGET>)
   {
    chop;
    ($ntcfile,$fmodel,$fcyc,$fproducts,$n_avg,$t_avg)=split(/\,/,$_);    
    $model{$ntcfile}=$fmodel;
    $cyc{$ntcfile}=$fcyc;
    $products{$ntcfile}=$fproducts;
    $ncep_avg{$ntcfile}=$n_avg;
    $total_products=$total_products+$fproducts;
   }
close TARGET;

$ntc_log="$ENV{DATA}/NTC.$ARGV[0]";

open(NTC,$ntc_log);
while(<NTC>)
   {
    chop;
    if($_ =~ /Report Generated at/)
       {
        ($j1,$yr,$month,$day,$hr,$mn,$sec,$zone)=split(/.*(\d\d\d\d).(\d\d).(\d\d) (\d\d):(\d\d):(\d\d).*/,$_);
        $PDY="$yr$month$day";
        $day_start_epoch=PDY2epoch($PDY);
       }

    if($_!~/  NTC   NTC      NTC/){next;}

    ($j1,$j2,$j3,$j4,$n_time,$t_time,$delay,$ntcfile)=split(/\s+/,$_);
    $ntcfile=~s/\d\d\d\d\d\d\d\d/yyyymmdd/;

#    if($ncep_post_sec{$ntcfile} ne ""){next};
    $ncep_post_sec{$ntcfile}=string2epoch($n_time)-$day_start_epoch;
   }
close NTC;


$starthr="$ARGV[1]";
$maxhr=$starthr+12;
$hrinc=1;
$mninc=15;
$sec="00";

$hr=$starthr;
$mn=10;


while($hr < $maxhr && $hr < 24 )
   {
    while($mn < 60 )
       {
        $report_timestring="$yr\-$month\-$day\-$hr\-$mn\-$sec";
        $report_time_sec=time2sec($report_timestring);
        $report_time_epoch=string2epoch($report_timestring);
        $report_excel_string="$month/$day/$yr</TD><TD>$hr:$mn";

        $delay_thres=15;
        $delay_less_thres=0;
        $delay_less_10=0;
        $delay_less_5=0;
        $delay_n5=0;
        $delay_n10=0;
        $delay_n15=0;
        $total=0;

        foreach $ntcfile (keys %products)
           {
            $target=$ncep_avg{$ntcfile};

        #    if(($target >= 0 && $target <= $report_time_sec)||$ncep_post_sec{$ntcfile}>=0)
            if(($target >= 0 && $target <= $report_time_sec))
               {
                ############################################
                # 5 Minute Threshold
                ############################################
                $target_mthres=$ncep_avg{$ntcfile}+$delay_thres*60;
                if($target_mthres <= $report_time_sec && ($ncep_post_sec{$ntcfile}<0 || $ncep_post_sec{$ntcfile} eq ""))
                   {
                    $delay_over_thres=$products{$ntcfile}+$delay_over_thres;
                    $total=$products{$ntcfile}+$total;
                   }
                if($target_mthres <= $report_time_sec || $ncep_post_sec{$ntcfile}>0)
                   {
                    $delay=$ncep_post_sec{$ntcfile}-$ncep_avg{$ntcfile};

                    if($delay>=(-5*60))
                       {
                        $delay_n5=$delay_n5+$products{$ntcfile};
                       }
                    if($delay>=(-10*60))
                       {
                        $delay_n10=$delay_n10+$products{$ntcfile};
                       }
                    if($delay>=(-15*60))
                       {
                        $delay_n15=$delay_n15+$products{$ntcfile};
                       }
                    if($delay<=5*60)
                       {
                        $delay_less_5=$delay_less_5+$products{$ntcfile};
                       }
                    if($delay<=10*60)
                       {
                        $delay_less_10=$delay_less_10+$products{$ntcfile};
                       }
                    if($delay<=$delay_thres*60)
                       {
                        $delay_less_thres=$delay_less_thres+$products{$ntcfile};
                       }
                    if($delay>$delay_thres*60)
                       {
                        $delay_over_thres=$delay_over_thres+$products{$ntcfile};
                        #print "$ntcfile $ncep_post_sec{$ntcfile} $ncep_avg{$ntcfile}\n";
                       }
                    $total=$products{$ntcfile}+$total;
                   }
               }
           }

        if($total>0)
           {
            $percent_15=($delay_less_thres)/$total*100;
            $percent_10=($delay_less_10)/$total*100;
            $percent_5=($delay_less_5)/$total*100;
            $percent_n5=($delay_n5)/$total*100;
            $percent_n10=($delay_n10)/$total*100;
            $percent_n15=($delay_n15)/$total*100;
           }
        else
           {
            $percent_15=100;
            $percent_10=100;
            $percent_5=100;
            $percent_n5=100;
            $percent_n10=100;
            $percent_n15=100;
           }
        printf "<TR><TD>%s</TD><TD>%3.4f</TD><TD>%3.4f</TD><TD>%3.4f</TD><TD>%3.4f</TD><TD>%3.4f</TD><TD>%3.4f</TD></TR>\n",$report_excel_string,$percent_15,$percent_10,$percent_5,$percent_n5,$percent_n10,$percent_n15;

        $mn=$mn+$mninc;
       }
    $mn=10;
    $hr=$hr+$hrinc;
    if($hr<10){$hr="0$hr"};
   }
