#!/usr/bin/perl -w
#
use strict;
use DBI;
use vars qw ( $dbh );
use CGI qw ( fatalsToBrowser );

my $query = new CGI;

my $mode = $query->param('mode') || "index";

$dbh = DBI->connect("dbi:Pg:dbname=doc;host=postgres.internal",undef,undef) or die $DBI::errstr;

if ($mode eq "index")
{
	$/ = 1;
	open(TMPL_R,"index.tmpl") or die $!;
	my $tmpl = <TMPL_R>;
	close(TMPL_R);

	$tmpl =~ s/#!LIST!#/&index_list()/iseg;

	print $query->header();

	print $tmpl;

	exit;
}
elsif ($mode eq "review")
{
	my $id = $query->param('id');

	if (!$id)
	{
		print $query->header();
		print "No review ID.";
		exit;
	}

	$/ = 1;
	open(TMPL_R,"review.tmpl") or die $!;
	my $tmpl = <TMPL_R>;
	close(TMPL_R);

	my $sth = $dbh->prepare("SELECT reviewer,title,author,isbn,reviewdate FROM reviewinfo WHERE id = $id");
	$sth->execute();
	my ($reviewer,$title,$author,$isbn,$reviewdate) = $sth->fetchrow_array();
	if (!$title)
	{
		print $query->header();
		print "No such review.";
		exit;
	}

	$reviewer =~ s/\</&lt;/g;
	$reviewer =~ s/\>/&gt;/g;

	$reviewer =~ s/([\w\d]+)\@([\w\d]+)/$1, being at $2/g;

	$sth = $dbh->prepare("SELECT value from reviewdata WHERE review_id = $id AND key = 'reviewbody'");
	$sth->execute();
	my ($body) = $sth->fetchrow_array();
	$sth->finish();

    # Do munging on the body
    # Convert hyperlinks.
    $body =~ s/\"([^\"]+)\"\s*\((http.+?)\)/\<a href=\"$2\"\>$1<\/a>/isg;
    $body =~ s/\s([^\s]+?)\s\((http:.+?)\)/<a href=\"$2\">$1<\/a>/isg;

	# Generate a search term for thsi reviewer
	my $rev_fragment = "";
	if ($reviewer =~ /([\w\d]+), being at/)
	{
		$rev_fragment = lc($1);
	}
	else
	{
		$reviewer =~ /^(.+?)\s/;
		$rev_fragment = lc($1);
	}
		

	$tmpl =~ s/#!TITLE!#/$title/iseg;
	$tmpl =~ s/#!REVIEWER!#/$reviewer/iseg;
	$tmpl =~ s/#!REVIEWER_FRAGMENT!#/$rev_fragment/iseg;
	$tmpl =~ s/#!REVIEWED!#/$reviewdate/iseg;
	$tmpl =~ s/#!AUTHOR!#/$author/iseg;
	$tmpl =~ s/#!ISBN!#/$isbn/iseg;
	$tmpl =~ s/#!REVIEWTEXT!#/$body/isg;

	print $query->header();

	print $tmpl;
}
elsif ($mode eq "reviewer")
{
	my $reviewer = $query->param('id');

	if (!$reviewer)
	{
		print $query->header();
		print "Please specify a reviewer.";
		exit;
	}

	if ($reviewer !~ /^[\d\w]+$/)
	{
		print $query->header();
		print "Please specify a reviewer.";
		exit;	
	}

    $/ = 1;
    open(TMPL_R,"reviewer.tmpl") or die $!;
    my $tmpl = <TMPL_R>;
    close(TMPL_R);

	my $list = "<ul>\n";

	my $sth = $dbh->prepare("SELECT id,title,author,reviewdate FROM reviewinfo WHERE reviewer like '\%$reviewer\%' ORDER BY id ASC");
	$sth->execute();
    while (my ($id,$title,$author,$date) = $sth->fetchrow_array())
	{
		$list .= "<li><a href=\"index.pl?mode=review\&id=$id\"><i>\"$title\"<i></a>, by $author (Reviewed on $date)</li>\n";
	}
	$sth->finish();

	$tmpl =~ s/#!LIST!#/$list/iseg;
	$tmpl =~ s/#!TERM!#/$reviewer/iseg;

	print $query->header();

	print $tmpl;

}
else
{
	print $query->header();
	print "Invalid mode\n";
}

sub index_list
{
	my $list = "<ul>\n";

	my $sth = $dbh->prepare("SELECT id,title,author,reviewdate FROM reviewinfo WHERE source = 'redbrick.books' ORDER BY id ASC");
	$sth->execute() or die $DBI::errstr;
	while (my ($id,$title,$author,$date) = $sth->fetchrow_array())
	{
		$list .= "<li><a href=\"index.pl?mode=review\&id=$id\"><i>\"$title\"<i></a>, by $author (Reviewed on $date)</li>\n";
	}
	$sth->finish();

	return $list . "</ul>\n";
}
