use utf8;
use warnings; no warnings "redefine";
use strict;

use Loader qw(line_in line_printer log_update log_view
		valid_person valid_kunde);
use Fehler qw(problem report_fehler warnung);
use Dbase::Help qw(Do DoFn DoSelect qquote);
use Dbase::Globals qw(content get_person kkpersinfo puny_decode puny_encode);

sub edit_assocs($;$) {
	my($id,$kn) = @_;
	return unless valid_person($id,1);

	my $v;
	while(1) {
		content( my $act = line_in "$kn Addr >",4 ) or last;

		if($act eq "?") {
			print <<'END';
l    auflisten
del  alle löschen
ADR  hinzufügen / löschen
END
			next;
		}
		if($act eq "l") {
			my $hdr;
			line_printer;
			DoSelect {
            			my($str) = @_;
				$str = puny_decode($str,4);
				print $Db::pr_fh <<END unless $hdr++;
Adresse
END
			    print $Db::pr_fh "$str\n";
	        	} <<_
	SELECT   email
	FROM     mailassoc
	WHERE    person = $id
	ORDER BY email
_
				or print "(leer)\n";
			next;
		}
		if($act eq "H") { log_view($kn,"mailassoc"); next; }
		if($act eq "del") {
			log_update(mailassoc => kunde => $id, undef, person => '-', undef, $id);
			Do("DELETE FROM mailassoc WHERE person = $id");
			next;
		}

		$act = puny_encode lc($act), 4;
		if ( defined( my $person = DoFn("SELECT person FROM mailassoc WHERE email = ${\qquote $act}" ) ) ) {
			if( $person == $id ) {
				log_update(mailassoc => kunde => $id, undef, email => '-', undef, $act);
				Do("DELETE FROM mailassoc WHERE email = ${\qquote $act}");
				print "...gelöscht.\n";
			}
			else {
				problem("...gehört zu Person #$person:".kkpersinfo($person));
			}
		}
		elsif ( defined( my $pers = get_person($act) ) ) {
			problem("Gehört schon zu Person #$pers:".kkpersinfo($pers)."!\n");
		}
		else {
			unless ($v) {
				require Email::Valid;
				$v = Email::Valid->new or die;
			}
			if ( my $address = $v->address($act) ) {
				$v->mx( $act = $address )
					or warnung 'Für diese Domain existiert kein MX- oder A-Record im DNS.';
			}
			else {
				problem "Das ist keine gültige E-Mail-Adresse.";
				next;
			}
			log_update(mailassoc => kunde => $id, undef, email => '*', undef, $act);
			Do("INSERT INTO mailassoc SET person=$id, email=${\qquote $act}");
			print "...eingefügt.\n";
		}
		next; fehler: report_fehler(4);
	}
	$id;
}

1;
