#!/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";}
&condenseLogs($settings);

if($ARGV[0] =~ "v"){print "Finding first month\n";}
my $firstDate = &getFirstMonth($settings);

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

$firstDate =~ /^(....)(..)/;
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 getFirstMonth
{
    my $settings = $_[0];
    
    my $line = 0;
    my $count = 0;
    my $firstMonth = 999999;

    open(FILE, "<$settings->{'logDir'}/00-halfStats-condensed.log");
    while($line = readline *FILE)
    {
	chomp($line);

        $line =~ /^.{2}(..)\/(..)\/(....)/;
        $month = $1;
        $day   = $2;
        $year  = $3;

	if("$year$month" lt "$firstMonth")
	{
	    #if($ARGV[0] =~ "v"){print "New youngest found: $year$month\n";}
	    $firstMonth = "$year$month";
	}

    }
    close(FILE);
    return($firstMonth);
}

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 = ();

    opendir(DIR, "$settings->{'logDir'}");
    while($file = readdir DIR)
    {
	chomp($file);

	if($file =~ ".log")
	{

	    open(FILE, "$settings->{'logDir'}/$dir/$file");
	    while($line = readline *FILE)
	    {
		if($line =~ "killed" || $line =~ "connected")
		{
		    $array[$count] = $line;
		    $count++;
		}
	    }
	    close(FILE);

	    if($settings->{'OS'} eq "unix")
	    {
		system("rm -f $settings->{'logDir'}/$file");
	    }
	    else
	    {
		system("erase $settings->{'logDir'}\\$file");
	    }
	}
    }
    closedir DIR;

    $count = 0;

    open(FILE, ">$settings->{'logDir'}/00-halfStats-condensed.log");
    if($settings->{'OS'} eq "unix"){flock(FILE, 2);}
    while($array[$count])
    {
	print FILE "$array[$count]";
	$count++;
    }
    if($settings->{'OS'} eq "unix"){flock(FILE, 8);}
    close(FILE);

}

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";
	
    }
}
