#!/usr/local/bin/perl -w

use Getopt::Std;

my %featnum = qw(gr 25 ff 26 tp 27 mf 28);
my %numfeat = qw(25 gr 26 ff 27 tp 28 mf);

my %opts;
getopts('an', \%opts);

my @feats = @ARGV;
if ($feats[0] =~ /\//) {
  @feats = split /\//, $ARGV[0];
}

my @usedfeats = (0..12, 29..30, 33..43);

my $dirnum = 1200;
++$dirnum while -e "data$dirnum";

open LOG, ">>log";

my $pre = "  <feature id='5'>\n";
my $post = "  </feature>\n";
my $indent = ' ' x 4;
foreach my $feat (@feats) {
  if ($feat eq 'B') {
    # "Back up" a level: remove the first line of $post, add it to
    # $pre, and unindent by one level.
    $post =~ s/(\s+<\/feature>\n)// or warn "Confused by post $post";
    $pre .= $1;
    $indent = substr ($indent, 2);
  } else {
    $pre .= $indent . "<feature id='$feat'>\n";
    $post = $indent . "</feature>\n" . $post;
    $indent .= '  ';
  }
}


#close LOG;
#print $pre . $post;
#__END__

if ($opts{a}) {
  foreach my $feat (@usedfeats) {
    next if in ($feat, @feats);
    my $tree = $pre . $indent . "<feature id='$feat'>\n" 
		    . $indent .  "</feature>\n" . $post;
    dumpTrees($tree);
    logTrees (@feats, $feat);
  }
} else {
  dumpTrees ($pre . $post);
  logTrees (@feats);
}

sub logTrees {
  local $, = '/';
  if ($opts{n}) {
    print @_;
    print "\n";
  } else {
    print LOG @_;
    print LOG "\n";
  }
}

sub dumpTrees {
  my $tree = shift;

  if ($opts{n}) {
    print $tree, "\n";
  } else {
    ++$dirnum while -e "data$dirnum";
    my $dir = "data$dirnum";
    mkdir $dir, 0755;

    foreach my $target (keys %featnum) {
      open (F, ">$dir/featureTree.$target");
      print F "<target id='", $featnum{$target}, "'>\n";
      print F $tree;
      print F "</target>\n";
    }
    print LOG "$dirnum: ";
  }
}

sub in {
  my $val = shift;
  while (@_) { return 1 if $val == shift }
  return 0;
}
