#!/bin/perl

use lib "/opt/spacenet/igpp/perl/IGPP";
use Clinetime;

sub CalcTime {

  my ($Data) = @_;

  $Data =~ s/^ //;
  my @Data = split / +/, $Data;
  my @Doy  = unpack "a2a3", $Data[0];
  my @Date = clinetime((clinetime(doy(@Doy)))[0]+($Data[1]/1000));

  my $Time = sprintf "%4d-%02d-%02dT%02d:%02d:%06.3f", @Date;

}

sub StartStopTime {

  my ($DatFile) = @_;
  my $Rec0 = `head -1 $DatFile`;
  my $RecN = `tail -1 $DatFile`;

  return(CalcTime($Rec0), CalcTime($RecN));

}


################
# main program #
################

my $UrlRoot  = "http://vmo.igpp.ucla.edu/data/vmo2/DE1/PWI";
my $NDRoot   = "spase://VMO/NumericalData/DE1/PWI";
my $GranRoot = "spase://VMO/Granule/DE1/PWI";
my $DataRoot = "/vmo2/data/DE1/waves_pwi/highres_vmsbin";

my @Files = @ARGV;

open (LOGFILE, ">de1_pwi.log");
foreach my $File (@Files) {

# gunzip file if it is gzipped
  if ($File =~ /\.gz$/) {
    print "gunzip $File\n";
    system("gunzip $File");
    $File =~ s/\.gz$//;
  }

  my $Granule = sprintf "%s.xml", substr($File, 0, -4);
  my @File = split /_/, (substr($File, 0, -4));
  my ($Start, $Stop) = StartStopTime($File);

# print granule
        open (GRANULE, ">$Granule");
        print  GRANULE "<?xml version=\"1.0\"?>\n";
        print  GRANULE "<Spase xmlns=\"http://www.spase-group.org/data/schema\">\n";
        print  GRANULE "   <Version>1.2.1</Version>\n";
        print  GRANULE "   <Granule>\n";
        printf GRANULE "      <ResourceID>%s/%s/Magnetometer/PT0.5S/%4d%02s%02s</ResourceID>\n", $GranRoot, $Station{$Sta}, @Date[0..2];
        printf GRANULE "      <ReleaseDate>%s</ReleaseDate>\n", $RelDate;
        print  GRANULE "      <ExpirationDate></ExpirationDate>\n";
        printf GRANULE "      <ParentID>%s/%s/Magnetometer/PT0.5S</ParentID>\n", $NDRoot, $Station{$Sta};
        printf GRANULE "      <URL>%s/%s/%d/%s</URL>\n", $UrlRoot, $Sta, $Year, $GzFile;
        printf GRANULE "      <StartDate>%s</StartDate>\n", $Start;
        printf GRANULE "      <StopDate>%s</StopDate>\n", $Stop;
        print  GRANULE "      <Checksum>\n";
        printf GRANULE "         <HashValue>%s</HashValue>\n", $FileMd5;
        print  GRANULE "         <HashFunction>MD5</HashFunction>\n";
        print  GRANULE "      </Checksum>\n";
        print  GRANULE "      <DataExtent>\n";
        printf GRANULE "         <Bytes>%s</Bytes>\n", $Stat[7];
        print  GRANULE "         <Units>Bytes</Units>\n";
        print  GRANULE "      </DataExtent>\n";
        print  GRANULE "   </Granule>\n";
        print  GRANULE "</Spase>\n";
        close (GRANULE);
}
close (LOGFILE);
