#!/bin/perl

sub PrintGranule {



}


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

my $DataPath = "/mcmac/magdata/stations";

my %Station = ("amer", "Americus", "benn", "Bennington", "glyn", "Glyndon", "lres", "Linares", "lyfd", "Lyford", "pcel", "Purcell", "rich", "Richardson", "satx", "San-Antonion", "wrth", "Worthington");
my @Sta = ("amer", "benn", "glyn", "lres", "lyfd", "pcel", "rich", "satx", "wrth");

open (LOGFILE, ">mcmac.log");
foreach my $Sta (@Sta) {
  opendir (STADIR, "$DataPath/$Sta");
  my @Years = sort (grep /\d{4}/, readdir STADIR);
  closedir (STADIR);

  foreach my $Year (@Years) {
    opendir (DATDIR, "$DataPath/$Sta/$Year");
    my @GzFiles = sort (grep /\.gz$/, readdir DATDIR);
    closedir (DATDIR);

    foreach my $GzFile (@GzFiles) {
      if (! $GzFile =~ /^B\d{8}_\w{4}\.txt\.gz$/) {

        print "Filename has an unrecognized format: $GzFile. Skipping.\n";
        print LOGFILE "Filename has an unrecognized format: $GzFile. Skipping.\n";

      } else {

        my $File = (split /\./, $GzFile)[0];
        print "$DataPath/$Sta/$Year/$GzFile -> $Sta/$File.xml\n";
        print LOGFILE "$DataPath/$Sta/$Year/$GzFile -> $Sta/$File.xml\n";

        my @Date = unpack "xa4a2a2", $GzFile;
        my @Stat = stat "$DataPath/$Sta/$Year/$GzFile";

        my @t = reverse(localtime($Stat[9]));
        my $RelDate = sprintf "%4d-%02d-%02dT%02d:%02d:%02d", $t[3]+1900, $t[4]+1, @t[5..8];

#        my $FileMd5 = (split / +/, (`md5 "$DataPath/$Sta/$Year/$GzFile"`))[3];
#        chomp $FileMd5;
        my $FileMd5 = (split / +/, (`md5sum "$DataPath/$Sta/$Year/$GzFile"`))[0];

# print granule
        open (GRANULE, ">$Sta/$File.xml");
        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>spase://VMO/Granule/UCLA/McMAC/%s/Magnetometer/PT0.5S/%4d%02s%02s</ResourceID>\n", $Station{$Sta}, @Date[0..2];
        printf GRANULE "      <ReleaseDate>%s</ReleaseDate>\n", $RelDate;
        print  GRANULE "      <ExpirationDate></ExpirationDate>\n";
        printf GRANULE "      <ParentID>spase://VMO/NumericalData/UCLA/McMAC/%s/Magnetometer/PT0.5S</ParentID>\n", $Station{$Sta};
        printf GRANULE "      <URL>http://spc.igpp.ucla.edu/mcmac/data/stations/%s/%d/%s</URL>\n", $Sta, $Year, $GzFile;
        printf GRANULE "      <StartDate>%4d-%02d-%02dT00:00:00</StartDate>\n", @Date;
        printf GRANULE "      <StopDate>%4d-%02d-%02dT23:59:59</StopDate>\n", @Date;
        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);
