#!/usr/bin/perl -w
use strict;
use Astro::Time;
use MIME::Base64;

my $year;
my $stdout;
my $overwrite;
my $help;
use Getopt::Long;

GetOptions('year=i'=>\$year, 'stdout'=>\$stdout, 'h|help'=>\$help, 'o|overwrite'=>\$overwrite);


sub usage {
  print STDERR<<EOF
Usage: sched2blockwiki.pl [options] <blockschedule>
--help, -h     print this information and exit
--year=<year>  produces wiki output for <year> (instead of the current year)
--stdout       print output to <stdout> instead of posting to the session wiki page
-o             overwrite existing wiki page instead of appending
EOF
  ;
}


sub print_header($$) {
  my ($txtfilename) = $_[0];
  my ($timestamp) = $_[1];

  $txtfilename =~ s|.*/||;
  my ($pngfilename) = $txtfilename;
  $pngfilename =~ s/\.txt$/.png/;
  my ($pdffilename) = $txtfilename;
  $pdffilename =~ s/\.txt$/.pdf/;

  $txtfilename =~ /(\S+)_\S+_(\S+)_v(\S+)\.txt/;
  my ($semester) = $1;
  my ($month) = $2;
  my ($version) = $3;


print<<EOF;
[[..:contacts | VLBI Contact Numbers]] \\\\
[[..:email | VLBI Email Addresses]]

===== Current Schedule =====
**Latest release:** Version $version, $timestamp
  * [[http://www.atnf.csiro.au/vlbi/schedules/lba/$txtfilename | Plain text version]]
  * [[http://www.atnf.csiro.au/vlbi/schedules/lba/$pngfilename | Graphical version]]
  * [[http://www.atnf.csiro.au/vlbi/schedules/lba/$pdffilename | PDF version]]

[[..:googlecalendarversion | Google calendar version]] \\\\
[[..:googlecalendarversionutc | Google calendar version (UTC)]]

EOF

}

sub redirect($) {
  my $session = $_[0];
  my ($outfile)  = lc("lbaops:$session:start");
  print "Wiki page: $outfile\n";
  open(my $wikiin, "<$ENV{'HOME'}/.wikiin");
  my ($stuff) = quotemeta(decode_base64(<$wikiin>));
  my $outname = "postwiki.py -u vlbi -p $stuff $outfile";
  if ($overwrite) {
    $outname .= " -o"
  }
  open STDOUT, '|-', "$outname" || die "Can't redirect STDOUT to $outname: $!";
}

if ($help) {
  usage();
  exit;
}

my ($filename) = $ARGV[0];

if (!defined $year) {
  my $dayno;
  ($dayno, $year) = mjd2dayno(now2mjd());
}

my $first=1;
my $session;
my $outfile = ();
my $timestamp = ();
my $basedate = 0;
while (<>) {
  # #! indicates a subarray. # on its own is a comment
  my ($subarray) = 0;
  if (s/#!//) {
    $subarray = 1;
  };
  s/#.*$//;
  s/^\s+//;
  next if ($_ eq '');

  if (/(\S+)\s+                # Experiment
       (\S+)\s+              # Setup
       (\S+)\s+                # Stations
       ([+-]?\d+)\s+(\d\d)(\d\d)\s+ # start
       ([+-]?\d+)\s+(\d\d)(\d\d)\s+ # end
       (\S+)           # PI
      /x) {      
    my $exper = $1;
    my $freq = $2;
    my $stations = $3;
    my $dayno = $4 + $basedate;
    my $time = "$dayno/$5:$6-$8:$9";
    my $pi = $10;

    $pi =~ s/check//;
    $pi =~ s/evlbi//i;
    $pi =~ s/_/ /;
    $pi =~ s/\([^)]*\)//;

    my ($day, $month) = dayno2cal($dayno, $year);

    my $date = sprintf("%2d/%02d", $day, $month);

    if ($first) {
      $first=0;
      $session = sprintf("LBA%s%d", month2str($month), $year);
      unless ($stdout) {
        redirect($session);
      }
      print_header($filename, $timestamp);
    }

    my ($hl) = '';
    my ($subtext) = '';
    if ($subarray) {
      # display subarrays in italics
      $hl = '//';
      $subtext = '(subarray)';
    }

    printf("| [[ %s | %s ]] | %-16s | $hl%-17s $subtext $hl | $hl$date$hl | $hl$time$hl | $hl%-12s$hl |\n",
	   lc($exper), lc($exper), $freq, $stations, $pi);

  }elsif (/Basedate\s+(\d+)/) {
    $basedate = $1;
  } elsif (/Version/) {
    /Time-stamp: (.*)/;
    $timestamp = $1;
  } else {
    warn "Skipping $_";
  }
}

