#!/usr/bin/perl
# Copyright Peter Jordan 2001
# Licensed under GPL
# Permission granted to distribute, use and modify provided this notice is retained.
use strict;
use CGI;
#use File::stat;
#use Fnctl ':mode';


my $tftpdir = "/tftpboot";
my $subnet = "192.168.2";
my $bootlink = "bootme";
my $yaboot = "yaboot.conf";

my $query=new CGI;

my %returns=$query->Vars;

for my $foo ( grep { /BOOT-$subnet\.\d+/ } keys %returns) {
  my $bootdir=$foo;
  $bootdir =~ s{BOOT-$subnet\.(\d+)}{$subnet\.$1};
  if ($returns{$foo} =~ /macos/) {
    unlink("$tftpdir/$bootdir/$bootlink");
    symlink("../bootmacos","$tftpdir/$bootdir/$bootlink") || die("symlink $tftpdir/$bootdir/$bootlink: $!");
  }
  elsif ($returns{$foo} =~ /linux/) {
    # hey. uhhh.. what file are ya deleting.. 
    unlink("$tftpdir/$bootdir/$bootlink");
    unlink("$tftpdir/$bootdir/$yaboot");
    symlink("../bootlinux-192.168.2.1","$tftpdir/$bootdir/$bootlink") || die("symlink:$!");
    symlink("../yaboot.conf-hda11","$tftpdir/$bootdir/$yaboot") || die("symlink:$!");
  }
  elsif ($returns{$foo} =~ /linux-install/) {
    unlink("$tftpdir/$bootdir/$bootlink");
    unlink("$tftpdir/$bootdir/$yaboot");
    symlink("../bootlinux-192.168.2.1","$tftpdir/$bootdir/$bootlink") || die("symlink:$!"); 
    symlink("../yaboot.conf-new-splat","$tftpdir/$bootdir/$yaboot") || die("symlink:$!");
  }
} # for

opendir(DIR, $tftpdir) || die("can't opendir $tftpdir: $!");
my @twistdirs = grep { /^$subnet\.\d+$/ && -d "$tftpdir/$_" } readdir(DIR);
closedir DIR;

my @twistdirs = map {sprintf("%vd", $_)} sort map { eval "v$_" } @twistdirs;

my %NODE;
for my $twistdir (@twistdirs) {
  my $link = "$tftpdir/$twistdir/$bootlink";
  if (-l $link) {
    $NODE{$twistdir} = readlink($link);
#    print "$link is a LINK, and points to ";
#    print readlink($link) . "\n";
  }
}



# parse input as command to change the symlink

#print $query->checkbox_group(-name=>'bootlinks', -values=>$

#foreach my $key (map {sprintf("%vd", $_)} sort map { eval "v$_" } keys %NODE) {
#  print $key, '=', $NODE{$key}, "\n";
#}


print $query->header;
print $query->start_html('Next Boot State');

print $query->start_form;
print $query->table(
  $query->Tr($query->th(['Host/Node', 'Next Boot', 'Change'])),
  $query->Tr([ map {my $addy = sprintf("%vd", $_);
    $query->td(
      [ $addy, $NODE{$addy}, $query->radio_group(
        -name=>"BOOT-$addy", -values=>['macos','linux','linux-install'])
      ]
    )} sort map { eval "v$_" } keys %NODE
  ]));

print $query->p;
print $query->submit;

print $query->end_form;

print $query->end_html;

# set all, set one
