use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(Do DoFn DoSelect in_list qquote);
use Fehler qw(warnung);
use Loader qw(edit_kunden line_ja_nein list_mailrules log_update lister);

sub set_domain_kunde($;$) {
	my($idi,$kn) = @_;

	my ( $domain, $okk ) =
	  DoFn("SELECT domain, kunde FROM domainkunde WHERE id = $idi");
	warnung(<<_)
Bei diesem Kunden gibt es eine *-Mailregel, die für diese Domain nicht
mehr greift, wenn sie zu einem anderen Kunden umgezogen wird.
_
	  if DoFn("SELECT 1 FROM mailrules WHERE kunde = $okk AND quelle IS NULL")
	  && !DoFn("SELECT 1 FROM mailrules WHERE quelle = ${\ qquote($domain) }");

	my $kk = edit_kunden(1,$kn);
	return undef unless defined($kk);
	return 0 if $kk == $okk;

	log_update("domainkunde","id",$idi,undef,"kunde",undef,$okk);
	Do("update domainkunde set kunde=$kk where id=$idi");
	Do("update kunde set geaendert=UNIX_TIMESTAMP(NOW()) where id=$kk or id=$okk");

	my @mailrules;
	DoSelect { push @mailrules, \@_ } <<_;
	SELECT id, quelle
	FROM   mailrules
	WHERE  kunde = $okk AND quelle RLIKE ${\ qquote("(^|[.@])$domain") }
_

	if (@mailrules) {
		print 'Zu dieser Domain existier'
		  . ( @mailrules == 1
			? 't eine MailRegel'
			: 'en ' . @mailrules . ' MailRegeln' )
		  . ":\n";
		no warnings 'once';
		lister(1);
		list_mailrules( $okk, [ map $_->[0], @mailrules ] );
		if (
			line_ja_nein(
				'Soll bei diesen der Kunde auch geändert werden', undef,
				undef,                                             'ja'
			)
		  )
		{
			for (@mailrules) {
				my $quelle = defined $_->[1] ? $_->[1] : '*';
				log_update(
					mailrules =>
					  kunde => $okk,
					undef,
					quelle => 'kunde_neu',
					undef,
					$quelle, $kk
				);
				log_update(
					mailrules =>
					  kunde => $kk,
					undef,
					quelle => 'kunde_alt',
					undef,
					$quelle, $okk
				);
			}
			Do( "UPDATE mailrules SET kunde = $kk WHERE "
				  . in_list( id => '', map $_->[0], @mailrules ) );
		}

	}

	$kk;
}

1;
