package PLP::Apache;

use strict;

our $VERSION = '1.00';

use PLP;

use constant MP2 => (
	defined $ENV{MOD_PERL_API_VERSION} and $ENV{MOD_PERL_API_VERSION} >= 2
);

BEGIN {
	if (MP2) {
		require Apache2::Const;
		require Apache2::RequestRec;
		require Apache2::RequestUtil;
		require Apache2::RequestIO;
	} else {
		require Apache::Constants;
	}
}

# mod_perl initializer: returns 0 on success, Apache error code on failure
sub init {
	our $r = shift;

	$PLP::print = 'PLP::Apache::print';
	
	$ENV{PLP_FILENAME} = my $filename = $r->filename;
	
	unless (-f $filename) {
		return MP2 ? Apache2::Const::NOT_FOUND() : Apache::Constants::NOT_FOUND();
	}
	unless (-r _) {
		return MP2 ? Apache2::Const::FORBIDDEN() : Apache::Constants::FORBIDDEN();
	}
	
	$ENV{PLP_NAME} = $r->uri;

	our $use_cache = $r->dir_config('PLPcache') !~ /^off$/i;
#S	our $use_safe  = $r->dir_config('PLPsafe')  =~ /^on$/i;
	my $path = $r->filename();
	my ($file, $dir) = File::Basename::fileparse($path);
	chdir $dir;

	$PLP::code = PLP::source($file, 0, undef, $path);

	return 0; # OK
}

# FAST printing under mod_perl
sub print {
	return unless grep length, @_;
	PLP::sendheaders() unless $PLP::sentheaders;
	$PLP::Apache::r->print(@_);
}

# This is the mod_perl handler.
sub handler {
	PLP::clean();
	if (my $ret = init($_[0])) {
		return $ret;
	}
	#S PLP::start($_[0]);
	PLP::start();
	no strict 'subs';
	return MP2 ? Apache2::Const::OK() : Apache::Constants::OK();
}

1;

