#!/usr/bin/perl

# $Id: show_chara.pl,v 1.2 2002/08/02 14:36:44 doc Exp $

use strict;

use Personae::DB;
use Personae::Chara;
use Personae::Log;
use CGI;
use MIME::Base64;

my $query = new CGI;

my $id = $query->param('id');
my $tmpl = $query->param('template');

if ($id !~ /^\d+$/)
{
	&Personae::Error::error("Bad Character ID.",1);
}

my $dbh = &Personae::DB::handle();

my $chara = new Personae::Chara;

$chara->loadFromID($id,$dbh);

if ($chara->{'name'} eq "")
{
	&Personae::Error::error("No Such Character.",1);
}

if (!$tmpl)
{
	$tmpl = "default";
}

if ($tmpl =~ /\.\./)
{
	&Personae::Error::error("Bad template Name",1);
}

$tmpl = "templates/" . $tmpl . ".tmpl";

open(TMPL,$tmpl) or &Personae::Error::error("Cannot Open Template.",1);

my @lines = <TMPL>;

close(TMPL);

my $template = join('',@lines);

$template =~ s/\#\!DP_CHAR_FULLNAME\!\#/$chara->{'fullname'}/iseg;
$template =~ s/\#\!DP_CHAR_PICTURE\!\#/&make_imgtag($id)/iseg;
$template =~ s/\#\!DP_CHAR_PICTURE_URL\!\#/get_picture.pl\?id\=$id/isg;
$template =~ s/\#\!DP_START_INFO\!\#(.*?)\#\!DP_END_INFO\!\#/&make_info_list($dbh,$1,$id)/iseg;
$template =~ s/\#\!DP_START_HISTORY\!\#(.*?)\#\!DP_END_HISTORY\!\#/&make_history_list($dbh,$1,$id)/iseg;

print $query->header();

print $template;

$dbh->disconnect();

sub make_imgtag
{
	my $id = shift;

	return "<IMG SRC=\"get_picture.pl?id=$id\">";
}

sub make_info_list
{
	my ($dbh,$data,$id) = @_;

	my %char_info = undef;
	my $sth = $dbh->prepare("SELECT info_id,info_title,info_text,info_order FROM DP_char_info WHERE chara_id = ? ORDER BY info_order");
	$sth->execute($id) or &Personae::Error::error("Cannot obtain Character Information.",1);
	my ($info_id,$info_title,$info_text,$info_order) = ();
	if (($info_id,$info_title,$info_text,$info_order) = $sth->fetchrow_array())
	{
		if ($info_id =~ /\d+/)
		{
			$char_info{$info_order . $info_id} = $info_title . "," . $info_text;
		}
	}
	else
	{
		return "";
	}
		
	while (($info_id,$info_title,$info_text,$info_order) = $sth->fetchrow_array())
	{
		if ($info_id =~ /\d+/)
		{
			$char_info{$info_order . $info_id} = $info_title . "," . $info_text;
		}
	}

	$sth->finish();

	my $realstring = "";

	foreach $info_id (sort keys %char_info)
	{
		if ($info_id ne "")
		{
			$realstring .= $data;

			($info_title,$info_text) = split(/,/,$char_info{$info_id});

			$realstring =~ s/\#\!DP_INFO_TITLE\!\#/decode_base64($info_title)/iseg;
			$realstring =~ s/\#\!DP_INFO_TEXT\!\#/decode_base64($info_text)/iseg;
		}
	}

	return $realstring;
}

sub make_history_list
{
	my ($dbh,$data,$id) = @_;

	my %char_history = undef;
	my $sth = $dbh->prepare("SELECT timeline_id,timeline_title,timeline_text,timeline_order FROM DP_char_timeline WHERE chara_id = ? ORDER BY timeline_order");
	$sth->execute($id) or &Personae::Error::error("Cannot obtain Character Timeline.",1);
	my ($history_id,$history_title,$history_text,$history_order) = ();
	if (($history_id,$history_title,$history_text,$history_order) = $sth->fetchrow_array())
	{
		$char_history{$history_order . $history_id} = $history_title . "," . $history_text;
	}
	else
	{
		return "";
	}
		
	while (($history_id,$history_title,$history_text,$history_order) = $sth->fetchrow_array())
	{
		$char_history{$history_order . $history_id} = $history_title . "," . $history_text;
	}

	$sth->finish();

	my $realstring = "";

	foreach $history_id (sort keys %char_history)
	{
		$realstring .= $data;

		($history_title,$history_text) = split(/,/,$char_history{$history_id});

		$realstring =~ s/\#\!DP_HISTORY_TITLE\!\#/decode_base64($history_title)/iseg;
		$realstring =~ s/\#\!DP_HISTORY_TEXT\!\#/decode_base64($history_text)/iseg;
	}

	return $realstring;
}
