#!/usr/local/bin/perl5
#
# $Id: raw-data.pl,v 1.14 2009/02/01 04:49:12 winter Exp $

use Data::Dumper;
use HTML::Entities;
use Date::Format;
use Cfg;

sub
strip_html {
	$_ = decode_entities(shift);

	$_ =~ s/\s*\<[^\>]+\>\s*//g;
	$_ =~ s/[\.\!\?\,]+//g;	# errant punctuation
	return $_;
}

sub
extract_number {
	$_ = strip_html(shift);

	if (/=.*[[:digit:]]+/) {
		(undef, $_) = split(/=/)
	}

	if (/([[:digit:]]+)/) {
		$i = int($1);
		if ($i > 0 && $i < 2001) {
			return int($1);
		}
	}
#	if (/one/) {
#		return 1;
#	}
	return undef;
}

sub
detect_comments {
	$_ = shift;

	$_ =~ s/Posted Via AR15\.Com Mobile//g;
	$_ =~ s/<BR>//g;	# hard breaks
	$_ =~ s///g;		# hard returns
	$_ =~ s/\s*<\/*(a|b|font|i|span|div|img)[^\>]*>\s*//g;	# Tags
	$_ =~ s/:\)//g;		# emoticons
	$_ =~ s/\[.*\]//g;	# emoticons
	$_ =~ s/[\.!?,]+//g;	# errant punctuation
	$_ =~ s/\s+$//g;	# trailing whitespace
	$_ =~ s/^\s+//g;	# leading whitespace
	$_ =~ s/one/1/g;

	return grep(/[^[:digit:]]+/, $_) ? 1 : 0;
}

while (<>) {
	chop;
	($page, $post, $pdate, $edate, $poster, $plevel, $message) = split(/\t/);
	next if ($post == 0);	# Skip the OP.

	$number = extract_number($message);
	$comments = detect_comments($message);
	$edited = $edate != 0 ? 1 : 0;

	$hash{$poster}++;
	push @posts,
		{
			poster => $poster,
			page => int($page),
			post => int($post),
			level => $plevel,
			post_date => int($pdate),
			edit_date => int($edate),
			edited => $edited,
			comments => $comments,
			message => $message,
			number => $number
		};
}
foreach $post ( @posts ) {
	$post->{multiple} = ($hash{$post->{poster}} > 1) || 0;
}

print <<__EOF__;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
	<title>${title} - Raw Data</title>
	<link rel="stylesheet" type="text/css" href="../contest.css" />
</head>
<body>
<h2><a href="${threadURL}">${title}</a> - Raw Data</h2>
<!--
<p>
<h2>
Winning number is: <br />
Winning poster is: <br />
</h2>
</p>
<p>
<a href="http://www.ar15.com/forums/topic.html?b=2&f=219&t=XXXXXX">See here for contest thread.</a>
</p>
-->
<p>
Data for last whole page only.<br />
Update checks every 10 minutes.<br />
Last update: \@DATE\@<br />
Last page: \@PAGE\@<br />
<br />
See the report <a href="report.html">here</a>.
</p>
<table class="data" cellpadding="0" cellspacing="0">
	<tr>
		<th class="dataCellHeader">Page</th>
		<th class="dataCellHeader">Post</th>
		<th class="dataCellHeader">Post Date</th>
		<th class="dataCellHeader">Edit Date</th>
		<th class="dataCellHeader">E</th>
		<th class="dataCellHeader">C</th>
		<th class="dataCellHeader">M</th>
		<th class="dataCellHeader">Poster</th>
		<th class="dataCellHeader">Membership</th>
		<th class="dataCellHeader">Number</th>
		<th class="dataCellHeader">Message</th>
		<th class="dataCellHeader">Raw text</th>
	</tr>
__EOF__

$i = 1;
foreach $post ( @posts ) {
	$c = ($i++ % 2) ? "l" : "d";

	$n = $post->{number} || "&nbsp;";
	$rm = encode_entities($post->{message}) || "&nbsp;";
	$m = $post->{message} || "&nbsp;";
	($pd = time2str("%c", $post->{post_date})) =~ s/\s/&nbsp;/g;
	($ed = $post->{edited} ? time2str("%c", $post->{edit_date}) : "&nbsp;") =~ s/\s/&nbsp;/g;
	($l = $post->{level}) =~ s/\s/&nbsp;/g;

print <<__EOF__;
	<tr>
		<td class="$c">$post->{page}</td>
		<td class="$c">$post->{post}</td>
		<td class="$c">$pd</td>
		<td class="$c">$ed</td>
		<td class="$c">$post->{edited}</td>
		<td class="$c">$post->{comments}</td>
		<td class="$c">$post->{multiple}</td>
		<td class="$c">$post->{poster}</td>
		<td class="$c">$l</td>
		<td class="$c">$n</td>
		<td class="$c">$m</td>
		<td class="$c">$rm</td>
	</tr>
__EOF__
}

print <<__EOF__;
</table>
</body>
</html>
__EOF__
