#!/usr/bin/perl -w
use strict;

use LWP::UserAgent;
use URI::Escape;

my $usage = <<EOHELP;
loadPredefinedStylesheets.pl [ uwobo_panel_conf_file ]
loadPredefinedStylesheets.pl { -u | --unload } [ uwobo_panel_conf_file ]
loadPredefinedStylesheets.pl { -r | --reload } [ uwobo_panel_conf_file ]
loadPredefinedStylesheets.pl { -h | --help   } [ uwobo_panel_conf_file ]

If uwobo_panel_conf_file is provided, it's used as HTML file from which
parse XSLT stylesheets, otherwise UWOBO_PANEL_CONF environment variable
is used.
EOHELP

sub getPredefinedStylesheets ($) {
  my $confile = shift;
  my %stylesconf;
  my $inForm = 0; # currenlty inside 'predefinedStylesheets' form
  open(CONF, "< $confile") || die "Can't open $confile";
  while(my $l = <CONF>) {
    chomp($l);
    if (not $inForm) {
      if ($l =~ /<form name="predefinedStylesheets">/) {
        $inForm = 1;
      }
    } else {  # in form
      if ($l =~ /<\/form>/) {
        $inForm = 0;
      } elsif ($l =~ /<option value="[^"]+">/) {
        my $val = $l;
        $val =~ s/.*<option value="([^"]+)".*>/$1/;
        my ($key, $ur, $use_getter) = split /,/, $val;
        $stylesconf{$key}[0] = $ur;
        if ($use_getter =~ /true/) {
          $use_getter = 1;
        } elsif ($use_getter =~ /false/) {
          $use_getter = 0;
        } else {
          die "Unknown value '$use_getter' for 'use_getter' field.";
        }
        $stylesconf{$key}[1] = $use_getter;
      }
    }
  }
  close(CONF);
  return %stylesconf;
}

my $action = "load";
my $opt = shift || "";
die $usage if (($opt eq "-h") or ($opt eq "--help"));
if (($opt eq "-u") or ($opt eq "--unload")) {
  $action = "unload";
} elsif (($opt eq "-r") or ($opt eq "--reload")) {
  $action = "reload";
} else {
  unshift (@ARGV, $opt);
}
my $confile =
  shift || $ENV{"UWOBO_PANEL_CONF"} || die "UWOBO_PANEL_CONF not defined";
my $getter_url = $ENV{"HELM_GETTER_URL"} || die "HELM_GETTER_URL not defined";
my $uwobo_url = $ENV{"HELM_UWOBO_URL"} || die "HELM_UWOBO_URL not defined";
my %styles = getPredefinedStylesheets($confile);
my $request_url = "";

if ($action eq "load") {  # load predefined stylesheets
  foreach my $k (keys %styles) {
    $request_url .= "&" unless ($request_url eq "");
    my $ur = $styles{$k}[0];
    my $use_getter = $styles{$k}[1];
    $request_url .= "bind=$k,";
    my $tmp = "";
    if ($use_getter) {
      $tmp .= $getter_url . "getxslt?uri="
    }
    $tmp .= $ur;
    $request_url .= uri_escape($tmp);
  }
  $request_url = $uwobo_url . "add?$request_url";

} elsif ($action eq "unload") { # unload predefined stylesheets
  $request_url = $uwobo_url . "remove?keys=" . join(',', keys %styles);

} elsif ($action eq "reload") { # reload predefined stylesheets
  $request_url = $uwobo_url . "reload?keys=" . join(',', keys %styles);

} else {  # unknown action
  die "Unknown action '$action'";
}

my $agent = LWP::UserAgent->new();
my $response = $agent->get($request_url);
print $response->as_string();
#   print "$request_url\n";

