#!/usr/bin/perl

# Library Includes
use lib "./";
use halfStatsTools;

# Main Program

&checkArgs();

my $count = 1;

if($ARGV[0] =~ "v"){print "Parsing config\n";}
my $settings = &parseConfig();

if($ARGV[0] =~ "v"){print "Checking directories\n";}
&checkDirs($settings);

if($ARGV[0] =~ "v"){print "Condensing logfiles\n";}
my $firstMonth = &condenseLogs($settings);

die "** Finished condensing logs, quitting\n\n" if($ARGV[0] =~ "c");

if($ARGV[0] =~ "v"){print "Generating pages for months after $firstMonth\n";}

$firstMonth =~ /^(....)(..)/;
my $firstYear = $1;
my $firstMonth = $2;

my $nextYr = $firstYear;
my $nextMo = $firstMonth;

my %prevHash = ();

while(&checkNextMo($nextYr, $nextMo) eq "yes")
{
    $prevHash{$nextYr}{$nextMo} = "$nextYr$nextMo";

    if($ARGV[0] =~ "v"){print "Checking $nextMo/$nextYr";}
    if(&checkIndexExist($nextYr, $nextMo) eq "no" || $ARGV[0] =~ "f")
    {
	if($ARGV[0] =~ "v"){print "\n$nextMo/$nextYr does not exist (or forced)\n";}
	if(!(-e "$settings->{'htmlDir'}/prev/$nextYr"))
	{
	    if($ARGV[0] =~ "v"){print "Creating directory for $nextYr\n";}
	    system("mkdir $settings->{'htmlDir'}/prev/$nextYr");
	}

	if(!(-e "$settings->{'htmlDir'}/prev/$nextYr/$nextMo"))
	{
	    if($ARGV[0] =~ "v"){print "Creating directory for $nextMo\n";};
	    system("mkdir $settings->{'htmlDir'}/prev/$nextYr/$nextMo");

	    if($ARGV[0] =~ "v"){print "\tCreating directory for $nextMo/players\n";}
	    system("mkdir $settings->{'htmlDir'}/prev/$nextYr/$nextMo/players");

	    if($ARGV[0] =~ "v"){print "\tCreating directory for $nextMo/images\n";}
	    system("mkdir $settings->{'htmlDir'}/prev/$nextYr/$nextMo/images");

	    if($ARGV[0] =~ "v"){print "\tCopying images to $nextMo/images\n";}
	    system("cp -f $settings->{'htmlDir'}/images/* $settings->{'htmlDir'}/prev/$nextYr/$nextMo/images");
	}

	if($ARGV[0] =~ "v"){print "Calling halfStats for $nextMo/$nextYr\n";}
	system("./halfStats -file prev $nextMo $nextYr");
    }
    else
    {
	if($ARGV[0] =~ "v"){print " (file exists)\n";}
    }

    if($nextMo == 12)
    {
	$nextMo = 1;
	$nextYr = $nextYr + 1;
    }
    else
    {
	$nextMo++;
    }

    if(length($nextMo) < 2)
    {
	$nextMo = "0$nextMo";
    }
}


&createPreviousHtml($settings, \%prevHash);

&cleanup($settings);

# Subroutines

sub createPreviousHtml
{
    my $settings = $_[0];
    my $hash = $_[1];
    my $yrKey = 0;
    my $moKey = 0;

    open(FILE, ">$settings->{'htmlDir'}/previous.html");
    if($settings->{'OS'} eq "unix"){flock(FILE, 2);}

    print FILE "<html><head><title>Previous Stats</title></head>\n";
    print FILE "<body bgcolor='black' text='yellow' link='white' vlink='white' alink='red'>\n";
    print FILE "<center>\n";
    print FILE "<table border='0'>\n";

    foreach $yrKey (sort { $hash->{$a} cmp $hash->{$b} } keys %{$hash})
    {
	foreach $moKey (sort { $hash->{$yrKey}{$a} cmp $hash->{$yrKey}{$b} } keys %{$hash->{$yrKey}})
	{
	    print FILE "<tr>\n";
	    print FILE "<td align='left'>Stats for:</td>\n";
	    print FILE "<td align='right'><a href='prev/$yrKey/$moKey/index.html' target='_prevStats'>$moKey/$yrKey</a></td>\n";
	    print FILE "</tr>\n";
	}    
    }

    print FILE "</table>\n";
    print FILE "</center></body></html>\n";

    if($settings->{'OS'} eq "unix"){flock(FILE, 8);}
    close(FILE);
}

sub checkIndexExist
{
    my $yr = $_[0];
    my $mo = $_[1];

    my $return = 0;

    my $file = "$settings->{'htmlDir'}/prev/$yr/$mo/index.html";
    
    if(-e $file)
    {
	$return = "yes";
    }
    else
    {
	$return = "no";
    }
    return($return);
}

sub checkNextMo
{
    my $yr = $_[0];
    my $mo = $_[1];

    my $return = "no";

    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
    $year+=1900;
    $mon+=1;

    if($yr < $year)
    {
	$return = "yes";
    }
    elsif($yr == $year && $mo < $mon)
    {
	$return = "yes";
    }
    else
    {
	$return = "no";
    }
    return($return);
}

sub checkDirs
{
    my $settings = $_[0];
    my $var = 0;
    my $prev = 0;
    my $players = 0;

    opendir(DIR, "$settings->{'htmlDir'}");
    while($var = readdir DIR )
    {
	chomp($var);
	if($var eq "prev")
	{
	    $prev = 1;
	}
	elsif($var eq "players")
	{
	    $players = 1;
	}
    }
    closedir(DIR);

    if($prev != 1)
    {
	system("mkdir $settings->{'htmlDir'}/prev");
	if($settings->{'OS'} eq "unix")
	{
	    system("chmod u+rwx,go+rx $settings->{'htmlDir'}/prev");
	}
	
    }
    if($players != 1)
    {        
	system("mkdir $settings->{'htmlDir'}/players");
	if($settings->{'OS'} eq "unix")
	{
	    system("chmod u+rwx,go+rx $settings->{'htmlDir'}/players");
	}
    }
}

sub condenseLogs
{
    my $settings = $_[0];

    my $file = 0;
    my $line = 0;
    my $count = 0;
    my @array = ();
    my $curfile = 0;
    my $firstMonth = 9999999;


    opendir(DIR, "$settings->{'logDir'}");
    @dirarr = sort grep { /.log$/ } readdir(DIR);
    close(DIR);

    foreach $file(@dirarr)
    {
	open(FILE, "$settings->{'logDir'}/$file");
	@tmparr = grep {!/<-1>/} <FILE>;
	close(FILE);
	chomp(@tmparr);

	unshift(@array, grep {/\" killed /} @tmparr);
	unshift(@array, grep {/connected, address/} @tmparr);
	
	if($settings->{'OS'} eq "unix")
	{
	    system("rm -f $settings->{'logDir'}/$file");
	}
	else
	{
	    system("erase $settings->{'logDir'}\\$file");
	}
    }

    $count = 0;

    foreach $element(@array)
    {
	$element =~ /^L (..)\/(..)\/(....)/;
	$string = "$3$1";

	if($string lt $firstMonth){$firstMonth = $string;}

	if($string ne $curfile && $string ne "0")
	{
	    close(FILE);
	    open(FILE, ">>$settings->{'logDir'}/$string.log");
	    $curfile = $string;
	}
	elsif($string == 1)
	{
	    open(FILE, ">>$settings->{'logDir'}/$string.log");
            $curfile = $string;
	}
	print FILE $element, "\n";
    }
    close(FILE);
    return($firstMonth);
}

sub cleanup
{
    system("rm -f $settings->{'htmlDir'}/_*Log_.*");
}


sub checkArgs
{
    if($ARGV[0] eq "-h" 
       || $ARGV[0] eq "-help" 
       || $ARGV[0] eq "--h" 
       || $ARGV[0] eq "--help" 
       || $ARGV[0] eq "/?")
    {
	print "\nUsage:\n\n";
	print "\t./trackPast [-vfh]\n\n";
	print "Switches:\n";
	print "v = Verbose mode.  Prints more information about script operation\n";
	print "f = Force.  Ignores existing index files and creates them again\n";
	die "h = This help screen\n\n";
	
    }
}
