#!/usr/bin/perl

use Getopt::Long;
use File::Copy;

$correctname=substr($0,0);

use lib "/mt/apps/gpms/DateTrans/lib";
use DateTrans qw(monName monNumber timeFormat AmPmFormat dayNumbeFormat);

use lib "/mt/apps/gpms/DateTrans/lib";
use  xsdxsltcheck qw(xsdcheck xsltcheck FGDC2MRFcheck xsl4mrf2fgdccheck);

use File::Basename;

sub usage() {
    print "Usage: perl $correctname [-directory=<directory>]\n";
    print "Example:\n";
    print "perl $correctname  -directory=/dir/subdir \n";
       print "/dir/subdir is the directory containing the files to be validated\n";

}
%gOptions;
&GetOptions(\%gOptions, qw(directory=s));
unless ($gOptions{directory} ) {
        usage();
        exit(1);
};

#---------------------------------------------file mangement section-1---------------------------------------------------------------------------------------
chomp($indir= $gOptions{directory});
print "\$indir = $indir\n";
#------------------------------------error trap-------------------------------------------------------------------------------------------------------------
if (-e $indir){
}else{
print "The directory $indir could not be found!!!!\n";
};

#------------------------------------getting the date---------------------------------------------------------------------------------------------------------

my $now=`date`;
$mon = substr($now,4,3);
$day=substr($now,8,2);
$year =substr($now,24,4);
$hour = substr($now,11,2);
$min = substr($now,14,2);
my $daynum= dayNumbeFormat($day);

#converting the date to a number
my $monName=monName($mon);
my $monnum =monNumber($mon);

$dateString =$year . $monnum . $daynum . $hour . $min;

#--------------------setting up the output directories-------------------------------------------------------------------------------------------------


$outdir="/mtdata001/geo/gpms/output/fgdc";
$logDir="/mtdata001/geo/gpms/log";

$subDirectory= "SeriesCollection" . $dateString;

$newLog =  $logDir . "/" . $subDirectory;
$newDir= $outdir . "/" . $subDirectory; 

$root = "/mt/apps";

print "\$newDir = $newDir\n";
system "mkdir $newDir";
system "mkdir $newLog";

#----------------------------------------------------reading in all the files ------------------------------------------------------------------------

opendir INPUTDIR, $indir or die "cannot open $dir: $!";

foreach $file (readdir INPUTDIR){
#print "one file is named $file\n";
$CompleteFile = $indir . "/" . $file;
#print "\$CompleteFile  = $CompleteFile \n";
$DirList[$DirListCounter]=$CompleteFile;
#$DirListCounter++;
#print "\$DirList[$DirListCounter] = $DirList[$DirListCounter]\n";
$DirListCounter++
};

#-----------------------------------redirecting the output---------------------------------------------------------------------------------------------------
open (SAVEOUT,">&STDOUT");

#----------------------------------------------------------Saxon-----------------------------------------------------------------------------------------
#ENV{'PATH'} = "/opt/saxon_lib/jdk1.5.0_11/bin:/mt/apps/gpms/output/mrf$newerrdir:$ENV{'PATH'}";#goodone
#$cp = "CLASSPATH";#goodone
#$ENV{$cp} = "/opt/saxon_lib/jdk1.5.0_11/lib/:/opt/saxon_lib/saxon9/saxon9sa.jar:/opt/saxon_lib/saxon9/saxon9-jdom.jar:/opt/saxon_lib/saxon9/:/opt/saxon_lib/saxon9/saxon9.jar:$ENV{$cp}";

$ENV{'PATH'} = "/apps/saxon/jdk1.5.0_24/bin::/apps/saxon/saxon9ee.jar::/apps/saxon:$rootout/mrf/$newerrdir:$ENV{'PATH'}";

$cp = "CLASSPATH";#goodone
$ENV{$cp} = "/apps/saxon/jdk1.5.0_24/lib/:/apps/saxon/saxon9ee.jar:/apps/saxon/saxon9ee.jar $CLASSPATH:/usr/share/java/saxon.jar";

#--------------------------------------------------------transforming the files-------------------------------------------------------------------------------

foreach $DirList (@DirList){
print SAVEOUT"-----------------------------------------------------\n\n";
$SlashLocation=rindex($DirList,"/")+1;
#print SAVEOUT "\$SlashLocation = $SlashLocation\n";
$NewOutputFileA =substr($DirList,$SlashLocation);
#print SAVEOUT "\$NewOutputFileA = $NewOutputFileA\n";

$FileType=substr($NewOutputFileA,0,2);
#eriesCollection="SeriesCollection_";
$SeriesCollection="SeriesCollection_";
#print SAVEOUT "\$FileType = $FileType\n";

if ($FileType  eq "tl"){
print SAVEOUT "--------This is the one with the error theme!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!--------------------\n\n";
$firstPart=substr($NewOutputFileA,0,7);
print SAVEOUT "\$firstPart = $firstPart\n";
$lastDash=rindex($NewOutputFileA,"_")+1;
$Theme=substr($NewOutputFileA,$lastDash);
$dotLocation=rindex($Theme,".");
$errTheme=substr($Theme,0,$dotLocation);
print SAVEOUT "\$errTheme = $errTheme\n";
print SAVEOUT "\$Theme = $Theme\n";
#$SeriesCollection="SeriesCollection_";
$NewOutputFile= $SeriesCollection . $firstPart . "_" . $Theme;
$NewOutputFileError= $SeriesCollection . $firstPart . "_" . $errTheme . ".err";
print SAVEOUT "\$NewOutputFileError = $NewOutputFileError\n";
}elsif($FileType  eq "gz"){
print SAVEOUT "-----------------------------------------------------\n\n";
$firstPart=substr($NewOutputFileA,0,7);
print SAVEOUT "\$firstPart = $firstPart\n";
$firstDashLoc=index($NewOutputFileA,"_")+1;
$postFirstDash=substr($NewOutputFileA,$firstDashLoc);
print SAVEOUT "\$postFirstDash = $postFirstDash\n";
$year=substr($postFirstDash,0,4);
print SAVEOUT "\$year = $year\n";
$SecondDashLoc=index($postFirstDash,"_")+1;
$SecondDash=substr($postFirstDash,$SecondDashLoc);
print SAVEOUT "\$SecondDash = $SecondDash\n";
$Theme=substr($SecondDash,2);
$errTheme=substr($Theme,0,$dotLocation);

print SAVEOUT "\$Theme = $Theme\n";
$NewOutputFile= $SeriesCollection . $firstPart . $Theme;
$NewOutputFileError= $SeriesCollection . $firstPart . "_" . $errTheme . ".err";
print SAVEOUT "\$NewOutputFileError = $NewOutputFileError\n";
print SAVEOUT "\$NewOutputFile = $NewOutputFile\n";
};



if ($NewOutputFile ne $$NewOutputFilePrev){
open STDOUT,">$NewOutputFile";
open STDERR, ">$NewOutputFileError";
my @csax = "java com.saxonica.Transform -outval:recover $DirList /mt/apps/gpms/SeriesCollectionXSDs/FGDC2Collection.xsl";
my $mif = system(@csax);
$$NewOutputFilePrev= $NewOutputFile;

if ($mif == 0){
system "mv $NewOutputFile $newDir";
system "rm $NewOutputFileError";
$goodTransformCounter++;
$GoodTransformArray[$goodTransformCounter]=$NewOutputFile;
}else{
system"mv $NewOutputFile $newLog";
system"mv $NewOutputFileError  $newLog";
$badTransformCounter++;
$badTransform[$badTransformCounter]=$NewOutputFile;
};
};

};
