#!/usr/local/bin/perl

use strict;
use File::Basename;
use File::Recurse;
use File::Copy;
fileparse_set_fstype();

my ($tmppwd) = `pwd`;
chomp($tmppwd);
my ($buildsuffix) = "html";
$MAIN::dirmode = 0755;
$MAIN::rootdir = shift @ARGV ;
if ($MAIN::rootdir eq "") {
   $MAIN::rootdir = `pwd`;
   chomp ($MAIN::rootdir);
} else {
   if (substr($MAIN::rootdir,1,1) ne "/") {
      $MAIN::rootdir = $tmppwd . "/" . $MAIN::rootdir;
   }
}
$MAIN::formatter = $tmppwd . "/bin/mhc";

print "root directory for build is $MAIN::rootdir\n";

%MAIN::verboten = (
      "menubar" => 1,
      "footer"  => 1,
      "header"  => 1,
);

my ($name, $basedir, $suffix) = fileparse($MAIN::rootdir);

$MAIN::builddir = $MAIN::rootdir . "-" . $buildsuffix;

print "target directory for build is $MAIN::builddir\n";


if (! (-d $MAIN::builddir && -r _ && -w _ && -x _ && -o _)) {
    # try to create builddir, or die
    mkdir $MAIN::builddir, $MAIN::dirmode || die "Could not create $MAIN::builddir\n";
} else {
    print "$MAIN::builddir exists -- cleaning up\n\n";
    recurse (\&nuke,$MAIN::builddir);
    print "\n\nSuccessfully fried all files in $MAIN::builddir\n";
}

recurse(\&build_html, $MAIN::rootdir);

print "\n\nAll done!\n\n";
exit 0;

sub nuke {
   my ($target) = shift @_;
   unlink ($target) || warn "error unlinking $target\n";
}

sub build_html {
    my ($fullname) = shift @_;
    my ($name, $basedir, $suffix) = 
        fileparse($fullname, ("\.html*","\.mhtml"));
    if (defined ($MAIN::verboten{$name}))  {
        print "verboten! $name\n";
        return 0;
    }
    chdir($basedir);
    $basedir =~ s/$MAIN::rootdir/$MAIN::builddir/;
    chop($basedir);
    if (! (-d $basedir && -r _ && -w _ && -x _ && -o _)) {
        print "$basedir doesn't exist. Creating it ...\n";
        # try to create builddir, or die
        mkdir ($basedir, $MAIN::dirmode) || die "Could not create ",
          "$basedir: $!\n";
    }
    if (($suffix !~ /mhtml/i) && ( -f $fullname) && (-o _)) {
        copy($fullname, "$basedir/$name$suffix") || die "Error copying ",
            "$fullname to $basedir/$name$suffix:\n$!\n";
    }
    if ($suffix =~ /mhtml/i) {
        print "<$fullname\n";
        open(MUNCH, "$MAIN::formatter $fullname|") || die "Could not run ",
             "$MAIN::formatter with $fullname as argument\n";
        my (@htmlfile) = (<MUNCH>);
        chomp(@htmlfile);
        close MUNCH;
        open(OUT, ">$basedir/${name}html") || die "Could not create ",
            ">$basedir/${name}html for writing\n";
        print ">$basedir/${name}html\n--\n";
        print OUT join("\n", @htmlfile);
        close OUT;
    }
}
