###########################################################################
### $Id: //depot/personal/ryan/main/src/wham/lib/wham.pm#5 $
###########################################################################
###
###########################################################################

package wham;

use strict;

my( %config, @black, @white);

### Export everything we need
use vars qw(@ISA @EXPORT @EXPORT_OK);
require      Exporter;
@ISA       = qw(Exporter);
@EXPORT    = qw(ReadList LoadConfig AddToList LogDate IsWhite IsBlack);
@EXPORT_OK = @EXPORT;

###########################################################################
### %config = &LoadConfig( $config_file);
###########################################################################
### load in configuration data from the specified config file
###########################################################################
sub LoadConfig
{
	my( $config) = @_;
	my( $home, @pw);

	@pw = getpwuid($<);
	$home = $pw[7];

	if( !defined( $config))
	{
		$config = $home . "/.whamrc";
	}

	$config{black}  = $home . "/.blacklist";
	$config{white}  = $home . "/.whitelist";
	$config{spam}   = $home . "/mail/spam";
	$config{release}   = $home . "/mail/release";

	### Set up config options
	die "ERROR: could not find config file '$config'.\n" unless( -f $config);
	eval {
		use vars qw( $black $white $spam $release $template);
		require $config;
		$config{black}    = $black    if( defined( $black));
		$config{white}    = $white    if( defined( $white));
		$config{spam}     = $spam     if( defined( $spam));
		$config{release}  = $release  if( defined( $release));
		$config{template} = $template if( defined( $template));
	};

#	print $config{spam}, "\n";

	return( %config);
}

###########################################################################
### @LIST = &ReadList( $file);
###########################################################################
###
###########################################################################
sub ReadList
{
	my( $file) = @_;
	my( $line, @ret);

	@ret = ();
	open( FILE, "<$file") || die "ERROR: could not open '$file'\n";
	while( defined( $line = <FILE>))
	{
		chomp( $line);
		$line =~ s/#.*//;
		$line =~ s/^\s+//;
		$line =~ s/\s+$//;
		next if( $line =~ /^\s*$/);
		push( @ret, $line);
	}
	close( FILE);

	return @ret;
}

###########################################################################
###
###########################################################################
###
###########################################################################
sub IsWhite
{
	my( $addr) = @_;
	my( $filter);

#print ")))))))))))$addr(\n";

	@white = &ReadList( $config{"white"});# unless( defined( @white));
	foreach $filter( @white)
	{
#		print "$filter\n";
		return $filter if( $addr =~ /$filter/i);
	}
	return undef;
}

###########################################################################
###
###########################################################################
###
###########################################################################
sub IsBlack
{
	my( $addr) = @_;
	my( $filter);

#print ")))))))))))$addr(\n";

	@black = &ReadList( $config{"black"});# unless( defined( @black));
	foreach $filter( @black)
	{
#		print "$filter\n";
		return $filter if( $addr =~ /$filter/i);
	}
	return undef;
}

###########################################################################
### &AddToList( $file, $comment, @addrs);
###########################################################################
###
###########################################################################
sub AddToList
{
	my( $list, $comment, @addrs) = @_;
	my( $file, $line);

	if( $list eq "black")
	{
		$file = $config{"black"};
	} elsif( $list eq "white") {
		$file = $config{"white"};
	} else {
		return "ERROR: unknown list '$list'\n";
	}

	open( FILE, ">>$file") || return "ERROR: could not append to '$file'\n";
	foreach $line (@addrs)
	{
		chomp( $line);
#		print $line, "\n";
		if( defined( $comment))
		{
			printf( FILE "%-30s # %-20s %s", $line, $comment, &LogDate());
		} else {
			print FILE $line;
		}
		print FILE"\n";
	}
	close( FILE);
	return "";
}

###########################################################################
### $string = &LogDate();
###########################################################################
### pretty print the date
###########################################################################
sub LogDate
{
	my($t) = @_;
	my ($sec,$min,$hour,$mday,$mon,$year);


	$t = time if( !defined($t));
	($sec,$min,$hour,$mday,$mon,$year) = localtime ($t);

	return sprintf ("%02d/%02d/%02d %02d:%02d",
		$mon + 1, $mday, $year + 1900, $hour, $min);
}

1;
