package OpenILS::WWW::Reporter;
use strict; use warnings;

use Apache2 ();
use Apache2::Log;
use Apache2::Const -compile => qw(OK REDIRECT :log);
use APR::Const    -compile => qw(:error SUCCESS);
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::RequestUtil;

use Template qw(:template);

use OpenSRF::EX qw(:try);
use OpenSRF::System;




# set the bootstrap config and template include directory when 
# this module is loaded
my $bootstrap;
my $includes = [];  

sub import {
	my( $self, $bs_config, $tdir ) = @_;
	$bootstrap = $bs_config;
	$includes = [ $tdir ];
}


# our templates plugins are here
my $plugin_base = 'OpenILS::Template::Plugin';

sub child_init {
	warn "Initing child with bootstrap $bootstrap\n";
	OpenSRF::System->bootstrap_client( config_file => $bootstrap );
}

sub handler {

	warn "TEST\n";
	my $apache = shift;
	my $path = $apache->path_info;
	(my $ttk = $path) =~ s{^/?([a-zA-Z0-9_]+).*?$}{$1}o;

	print "Content-type: text/html; charset=utf-8\n\n";

	_process_template(
			apache		=> $apache,
			template		=> "$ttk.ttk",
			);

	return Apache2::Const::OK;
}


sub _process_template {

	my %params = @_;
	my $ttk				= $params{template}		|| return undef;
	my $apache			= $params{apache}			|| undef;
	my $param_hash		= $params{params}			|| {};

	my $template;

	$template = Template->new( { 
		OUTPUT			=> $apache, 
		ABSOLUTE			=> 1, 
		RELATIVE			=> 1,
		PLUGIN_BASE		=> $plugin_base,
		INCLUDE_PATH	=> $includes, 
		PRE_CHOMP		=> 1,
		POST_CHOMP		=> 1,
		LOAD_PERL		=> 1,
		} 
	);

	try {

		if( ! $template->process( $ttk, $param_hash ) ) { 
			warn  "Error Processing Template: " . $template->error();
			my $err = $template->error();
			$err =~ s/\n/\<br\/\>/g;
			warn "Error processing template $ttk\n";	
			my $string =  "<br><b>Unable to process template:<br/><br/> " . $err . "!!!</b>";
			print "ERROR: $string";
			#$template->process( $error_ttk , { error => $string } );
		}

	} catch Error with {
		my $e = shift;
		warn "Error processing template $ttk:  $e - $@ \n";	
		print "<center><br/><br/><b>Error<br/><br/> $e <br/><br/> $@ </b><br/></center>";
		return;
	};

}


1;
