#!/usr/bin/perl -w
use XML::Parser;

$my_nick="";
$min_trust=300;
@good_guys=("slava");
@bad_guys=("test");


## Set handlers for xml parser
 my $parser= XML::Parser->new(Handlers=>{
      Start=> \&elem_start,
      End  => \&elem_end,
      Char => \&char_data});

## Parse input
 $filename=shift @ARGV or die "Use $0 file.dbl group_name\n";
 $grp=shift @ARGV or die "Use $0 file.dbl group_name\n";
 chomp ($filename);
 chomp ($grp);
 open(IN, "cat $filename | gzip -d |");
  $parser->parse(*IN);
 close(IN);
 
## Element start handler
 sub elem_start
 {
  my ($expat,$name,%attr)=@_;
  if ($name eq "record")
     {
      %rule=();
      $trust=0;
      $edit="";
      return(0);
     }

  if ($name eq "add" or $name eq "check")
     {
      $calc_flag=1;
      %calc=();
      return(0);
     }
   
   $option=$name     
 }
 
## Element end handler
 sub elem_end
 {
  my ($expat,$name)=@_;

  if ($name eq "record" && $rule{"group"} eq $grp)
     {
#     print $rule{"rule"}," ",$trust,"\n";
      if ($trust < $min_trust) 
        {
	 return (0);
	}
      if ($edit ne "") {print $edit."\n";}
      else {print $rule{"rule"}."\n";}
      return(0);
     }
    

    if ($name eq "check" || $name eq "add")
     {
       $calc_flag=0;
    
       # Users trust modifications
       if ($calc{"user"} eq $my_nick) {$calc{"trust"}+=9999999999999;}

       foreach (@good_guys)
       {
        if ($_ eq $calc{"user"}) {$calc{"trust"}+=999999;}
       }       

       foreach (@bad_guys)
       {
        if ($_ eq $calc{"user"}) {$calc{"trust"}=0;}
       }       

      if (exists($calc{"answer"}) && $calc{"answer"} eq "No")
         {$trust-=$calc{"trust"};}
      else 
         {$trust+=$calc{"trust"};}

      if (exists($calc{"edit"}) && $calc{"trust"} > $min_trust)
         {$edit=$calc{"edit"};}

     }

   $option="null";
 } 
 
 ## Char data handler
 sub char_data
 {
  my ($expat,$text)=@_;
  if ($option eq "null") {return (0);}
  if ($calc_flag) {$calc{$option}=$text;}
  else {$rule{$option}.=$text;}
 }
  