#!/usr/athena/bin/perl

$query = $tmp if ($tmp = shift(@ARGV));
$since = $tmp
    if (($tmp = shift(@ARGV)) =~ /^(\d{4})\-\d{2}\-\d{2}$/);
$loweryear = ($1<1986) ? 1986 : $1;
#@dirs = grep($_='/afs/athena.mit.edu/user/t/a/tabbott/sipb/data/minutes/'.$_.'_minutes',
@dirs = grep($_='/afs/sipb.mit.edu/admin/minutes/HISTORY/'.$_.'_minutes',
    $loweryear..(gmtime(time))[5]+1900);

@dirs = @ARGV if (@ARGV);

&usage if ($query =~ /^h/i);

$qs .= "v" if ($query =~ /^v/i);
$qs .= "n" if ($query =~ /^n/i);
$qs .= "vn" if ($query =~ /^m/i);
$qs .= "p" if ($query =~ /^p/i);
$qs .= "g" if ($query =~ /^g/i);
$qs .= "nvpg" if ($query =~ /^a/i);

&usage if (! $qs);

$start = `pwd`;
chop $start;

for $dir (@dirs) {
#	print "Dir = $dir\n";

	chdir $dir;
        for $f (<minutes.*>) {
            #print "$f\n";
            #($f =~ /^minutes\. (\d\d\d\d) \. (\d+) \. (\d+)$/x) &&
            #    print "$1-$2-$3 $since" . ("$1-$2-$3" ge $since) . "\n";
            if (($f =~ /^minutes\. (\d\d\d\d) \- (\d+) \- (\d+)$/x) &&
                ("$1-$2-$3" ge $since)) {
                push @files, "$dir/$f"
            }
            if (($f =~ /^minutes\. (\d\d\d\d) \. (\d+) \. (\d+)$/x) &&
                ("$1-$2-$3" ge $since)) {
                push @files, "$dir/$f"
            }
            if (($f =~ /^minutes\. (\d\d) \. (\d+) \. (\d+)$/x) &&
                ("19$1-$2-$3" ge $since)) {
                push @files, "$dir/$f"
            }
        }
	chdir $start;
}

for $file (@files) {
	    $count++;
	print "File = $file\n";

	open(MINUTES,$file) || warn "couldn't open $file\n";

	while(<MINUTES>) {
#	    print $_;
		last if /attendance/i;
	}

	while(<MINUTES>) {
	 
	    s/^\s*//;
	    s/[.\s]*$//;
	    if (/:\s*/ || /^$/) {
		$people =~ tr/A-Z/a-z/;
		@nlp = ($`,$');

		#' deal with "marc (random comment)"
		$people =~ s/\([^\)]*\)//g;
		$people =~ s/^[^\(]*\)//;
		$people =~ s/\([^\)]*$//;
		if ($people =~ /,/) {
		    @people = split(/\s*,\s*/,$people);
		    # deal with "Marc Horowitz <marc>"
		    grep(s/^.*\<(.*)\>.*$/$1/,@people);
		    # deal with "Marc Horowitz"
		    grep(s/^.* ([^ ]+)$/$1/,@people);
		} else {
		    @people = split(/\s+/,$people);
		}
#		print "$list \n ";
		# deal with one-character non-names
		@people = grep(length($_)>1,@people);              
		if ($list =~ /^voting/i) {
		    push (@voters,@people);
		    push (@curvoters,@people);
		} elsif ($list =~ /members/i) {
		    push (@nonvoters,@people);
		    push (@curnonvoters,@people);
		} elsif ($list =~ /prospectives/i) {
		    push (@prospects,@people);
		    push (@curprospects,@people);
		} elsif ($list =~ /guests/i) {
		    last;
		    push (@guests,@people);
		    push (@curguests,@people);
		}	     
			if ($list =~ /treasurer\'s/i)
			{
			    print "moo \n";
			}
			
#		last if /^$/;
		($list,$people) = @nlp;
	    } else {
		$people .= ' '.$_;
	    }
	}

        $attvote = $attnonvote = $attprospect = $attguest = 0;
        for (@curvoters) {$attvote++;}
        for (@curnonvoters) {$attnonvote++;}
        for (@curprospects) {$attprospect++;}
        for (@curguests) {$attguest++;}
        print "Members: $attvote; Associate Members: $attnonvote; Prospectives: $attprospect; \n";
	@curvoters=0;
        @curnonvoters=0;
        @curguests=0;
        @curprospects=0;
        $attendances[$num]=$attvote + $attnonvote + $attprospect;
        $num++;
	close(MINUTES);
#        if($num >= 13)
#	{
#	    last;
#	}
	$list = 0;
}

$attvote = $attnonvote = $attprospect = $attguest=0;
for (@voters) { $voters{$_}++; $attvote++;}
for (@nonvoters) { $nonvoters{$_}++; $attnonvote++;}
for (@prospects) { $prospects{$_}++; $attprospect++;}
for (@guests) { $guests{$_}++; $attguest++;}


if ($qs =~ /v/) {
	print "Voting members:\n";
	&list('voters');
	print "\n";
}
if ($qs =~ /n/) {
    print "Nonvoting members:\n";
    &list('nonvoters');
    print "\n";
}
if ($qs =~ /p/) {
	print "Prospectives:\n";
	&list('prospects');
	print "\n";
}

print "Meetings since $since\n";
print "$count total meetings queried \n";
print "Members: $attvote; Associate Members: $attnonvote; Prosectives: $attprospect; \n";

@attendances = sort {$a <=> $b} @attendances;

for (@attendances)
{
    print "$_\n";
}
print "Median: $attendances[$num/2]\n";

sub list {
	local($l) = @_;
eval <<EOE;
	for (sort(keys($l))) {
		print "\t",\$_,": ",\$${l}{\$_},"\n";
	}
EOE
}

sub usage {
    die $0." [members | voting | nonvoting | prospectives | guests | all]".
	" [yyyy-mm-dd] [dirs]\n";
}
