package WebLogger;
use strict;



sub new {
 ## constructor
my %byinst;
my %byfile;
my %inst;
my %files;
my $class = shift;
my $self = {};
 $self->{itype} = shift || "institution";
 $self->{cid} = shift;
 $self->{vcid} = shift;
 $self->{iid} = shift;
 $self->{type} = shift || "File Access";
 $self->{override} = shift;
 $self->{mode} = shift || "0"; # if set to something other than 0 the module is in a debug mode
 $self->{byinst} = \%byinst;
 $self->{inst} = \%inst;
 $self->{files} = \%files;
 $self->{byfile} = \%byfile;

 bless $self;

return $self;
};


sub DESTROY {
 my $self = shift;
 $self->{itype} = undef;
 $self->{cid} = undef;
 $self->{vcid} = undef;
 $self->{iid} = undef;
 $self->{byinst} = undef;
 $self->{inst} = undef;
 $self->{byfile} = undef;
 $self->{mode} = undef;
 $self->{override} = undef;
};

sub add {
 my $self = shift;
 my $ln = shift;
 my $ipt = shift;
 $ln =~ s/[\r\n]//ig;
 my $file;# = $ln;

if ($self->{override} ne "") {
 my $tp = $self->{override};
 next unless ($ln =~ /$self->{override}/);
};


#if ($self->{type} =~ /file/i) { print "adding $ln \n" };
 if ($ln =~ /\s/) {
  $ln =~ /^(.+)\s(.+)/;
  ($file,$ln) =  ($1,$2);
 };
 my %bf= %{$self->{byfile}};
 my %bi = %{$self->{byinst}};
 my %inst = %{$self->{inst}};
 my %files = %{$self->{files}};

if ($self->{type} =~ /export/i) {
#print "export\t$ln\n";
  $ln =~ s/\.sid\/uffff/\.sid/ig;
 if ($ln !~ /\.sid/) {
  $ln =~ /(.+)\?(.+)/;
  $file =$1;
  $ln = $2;

#print "not SID $file - $ln\n";
 };
  $ln =~ s/\?/\&/ig;
#  print $file."-\n";
};


$ln =~ s/\?/\&/ig;

 if ($file =~ /(.+)\.sid&(.+)/) {$file = $1.".sid"; $ln = $2.$ln;};
 if ($file =~ /(.+)\.jpg&(.+)/) {$file = $1.".jpg"; $ln = $2.$ln;};

 if ($ln =~ /(.+)\.jpg&(.+)/) {$file = $1.".jpg"; $ln=$2.$ln;};


#print "$file - $ln\n";
 $ln =~ s/\?(ticket|servertype|image|resolution|userid|username|cid|vcid|iid|usergroup|profileid)\=/\&$1\=/ig;
 my @tmp = split (/\&/,$ln);
 my %tmp_;
 my $ln_;
 for (@tmp) {my ($t,$t2) = split (/\=/,$_);$tmp_{$t} = $t2;};
# print "$tmp_{'cid'} - $self->{cid}\n";
# next if ($tmp_{'cid'} ne $self->{cid} && $self->{cid} ne "");
# next if ($tmp_{'vcid'} ne $self->{vcid} && $self->{vcid} ne "");
# next if ($tmp_{'iid'} ne $self->{iid} && $self->{iid} ne "");

if ($self->{override} eq "") {
 next if ($tmp_{'cid'} ne $self->{cid} && $tmp_{'cid'} ne "UNAVAILABLE");
 next if ($tmp_{'vcid'} ne $self->{vcid} && $tmp_{'vcid'}ne "UNAVAILABLE");
 next if ($tmp_{'iid'} ne $self->{iid} && $tmp_{'iid'}ne "UNAVAILABLE");
}

 $file = $tmp_{"image"} if defined $tmp_{"image"};
 my @tmp = split(/\//,$file);
 $file = $tmp[(scalar(@tmp) -1)];
# print "$file ";

#print "$file - $ln\n";
my $user;

 if ($self->{itype} eq "user") {
	$user = $tmp_{"username"};
 } else {
	$user = $tmp_{"usergroup"};
 };

 # print "$ln -> $user -> $ipt\n"; 
 $user = $ipt if $ipt ne "";

 $user =~ s/ /_/ig;
#print $user."\n";
my $pre = "$file\t\t".$tmp_{'resolution'};
#print $pre."\n" if $user =~ /u/i;
if (defined $bf{$pre}) {$bf{$pre}++;} else {$bf{$pre} = 1;};

$pre = "$file\t$user\t".$tmp_{'resolution'};
#print $pre."\n" if $user =~ /u/i;
if (defined $bf{$pre}) {$bf{$pre}++;} else {$bf{$pre} = 1;};


$pre = "$user\t".$tmp_{'resolution'};
#print $pre."\n" if $user =~ /u/i;
if (defined $bi{$pre}) {$bi{$pre}++;} else {$bi{$pre} = 1;};
$inst{$user} = 1 if (!defined $inst{$user});
$files{$file} = 1 if (!defined $files{$file});

 $self->{files} = \%files;
 $self->{byfile} = \%bf;
 $self->{byinst} = \%bi;
 $self->{inst} = \%inst;

};

sub getQueries {
  my $self = shift;
  my $user = shift;
  my $ifilter = shift || 0;
  my $ffilter = shift || 0;
  my %bf= %{$self->{byfile}};
  my %bi = %{$self->{byinst}};
  my %inst = %{$self->{inst}};
  my %files = %{$self->{files}};
  my $ret;
#  $user = undef if $user eq "";


my %total;
$ret .= "<BR><BR><h2>$self->{type}: $self->{itype} by Resolution</h2><TABLE border=1><TR><TD><B>Institution</B></TD><TD><B>Size 1</B></TD><TD><B>Size 2</B></TD><TD><B>Size 3</B></TD><TD><B>Size 4</B></TD><TD><B>Size 5</B></TD><TD><B>Size 6</B></TD><TD><B>Size 7</B></TD><TD><B>Size 8</B></TD></TR>\n";
# print keys (%bi);
for my $ins (keys %inst) {
     next if ($ins !~ /^$user$/ && $user ne "");
   my $lnsum;
   my $rer .= "<TR><TD>$ins</TD>";

 for my $res (1...8) {
   if (defined $total{$res}) {$total{$res} += $bi{$ins."\t".$res}} else {$total{$res} = $bi{$ins."\t".$res}};
   $rer .= "<TD>";
   $rer .= $bi{$ins."\t".$res};
   $lnsum .= $bi{$ins."\t".$res};
   $rer .= "<i>0</i>" if (!defined $bi{$ins."\t".$res});
   $rer .= "</TD>";
 };
 $rer .= "</TR>\n";
# print "$ins|$lnsum|$filter|\n";#$rer|\n";
 $ret .= $rer unless ($lnsum eq "" || $lnsum < $ifilter);
};
$ret .= "<TR><TD><B>TOTAL:</B></TD>";
 for my $res (1...8) {
   $ret .= "<TD><B>";
   $ret .= $total{$res};
   $ret .= "0" if (!defined $total{$res});
   $ret .= "</B></TD>\n";
 };
$ret .= "</TR></TABLE>";


$ret .= "<BR><BR><h2>$self->{type}: Files by Resolution</h2><TABLE border=1><TR><TD><B>Filename</B></TD><TD><B>Size 1</B></TD><TD><B>Size 2</B></TD><TD><B>Size 3</B></TD><TD><B>Size 4</B></TD><TD><B>Size 5</B></TD><TD><B>Size 6</B></TD><TD><B>Size 7</B></TD><TD><B>Size 8</B></TD></TR>\n";

%total = ();
for my $file (keys %files) {
   my $rer .= "<TR><TD>$file</TD>";
   my $lnsum;
 for my $res (1...8) {
   if (defined $total{$res}) {$total{$res} += $bf{"$file\t$user\t$res"}} else {$total{$res} = $bf{"$file\t$user\t$res"}};
   $rer .= "<TD>";
   $rer .= $bf{"$file\t$user\t$res"};
   $lnsum .= $bf{"$file\t$user\t$res"};
   $rer .= "<i>0</i>" if (!defined $bf{"$file\t$user\t$res"});
   $rer .= "</TD>";
 };
 $rer .= "</TR>\n";
 $ret .= $rer unless ($lnsum eq "" || $lnsum < $ffilter);
};


$ret .= "<TR><TD><B>TOTAL:</B></TD>";
 for my $res (1...8) {
   $ret .= "<TD><B>";
   $ret .= $total{$res};
   $ret .= "0" if (!defined $total{$res});
   $ret .= "</B></TD>\n";
 };
$ret .= "</TR></TABLE>";

return $ret;

};

sub numerically {$a <=>$b;};

1;
