#!/usr/bin/perl
use strict;
use warnings;
use MIME::Base64;
use Socket;
use Carp qw(croak);

sub homedir(){
	$ENV{HOME}=~/(.*)/;
	$::homedir=$1;
}
use lib homedir."/.config";
require "antispam.pl";

use Term::Prompt qw(termwrap prompt);
   $Term::Prompt::MULTILINE_INDENT = '';
use lib homedir."/.lib/perl";
use BE::Lib;
use BE::Antispam_MySQL qw(check_address sql quote);
use BE::Antispam_tools;

sub update_abuse($$$$){
	my ($table, $query, $mail, $mails) = @_;
#	$table=quote($table);
	$query=quote($query);
	$mail =quote($mail);
	$mails=quote($mails);
	my $q = sql("update $table set mail=$mail, mails=$mails where query=$query");
}

sub friendly_query($$){
	if($_[0] eq "whois_num"){return inet_ntoa(pack('N',$_[1]))};
	return $_[1];
}

sub suggest_block($){
	my $ip=quote($_[0]);
	my $query = sql("insert ignore into blockme values($ip)");
}

sub update_email_pref($$){
	my ($mails, $mail) = @_;
#	$mails=quote($mails); #done, not again
	$mail =quote($mail);
	my $query = sql("replace into email_pref values($mails, $mail)");
}

my %skip=();

for my $table ("whois_num", "whois_txt"){
	my $query=sql("select * from $table where mail='()'");
	while (my $r=$query->fetchrow_hashref){
		my %r=%$r;

		my @mailsb=sort(split(',', $r{mails}));
		my %mailsb;
		for (@mailsb){$mailsb{$_}=1};
		get_abuse_address(%mailsb);
		@mailsb=sort(keys(%mailsb));
		%mailsb=();

		my $mails=quote(join(',', @mailsb));

		if(1==@mailsb){
			update_abuse($table, $r{query}, $mailsb[0], $r{mails});
			print "updated ".friendly_query($table, $r{query})." to $mailsb[0]\n";
			next;
		}elsif(!@mailsb){
			update_abuse($table, $r{query}, '<>', undef);
			print "updated ".friendly_query($table, $r{query})." to <>\n";
			next;
		}

		my $q2=sql("select mail from email_pref where mails=$mails");
		if(my $mail=$q2->fetchrow){
			update_abuse($table, $r{query}, $mail, $r{mails});
			print "updated ".friendly_query($table, $r{query})." to $mail\n";
			if($table eq "whois_num" and $mail eq '[]'){suggest_block($r{query})};
			next;
		}else{
			print $r{txt},"\n";
			unshift(@mailsb, '[]');
			my $x=&prompt("M", {
				prompt => '? ',
				items => \@mailsb,
				accept_empty_selection => 1},'enter number of abuse contact, or leave blank to skip','');
			if(defined $x){
				my $mail=$mailsb[$x];
				if($table eq "whois_num" and $mail eq '[]'){suggest_block($r{query})};
				update_abuse($table, $r{query}, $mail, $r{mails});
				if(&prompt('Y','Update prefered list','','y'))
				{update_email_pref($mails, $mail)};
			}else{
				print friendly_query($table, $r{query})." not updated\n";
				$skip{$mails}=1;
			}
		}
	}
}
