use utf8;
use warnings; no warnings "redefine";
use strict;
use Fehler qw(problem warnung report_status);
use Dbase::Globals qw(get_gruppen get_kunde name_kunde puny_encode test_gruppe);
use Dbase::Help qw(Do DoFn qquote);
use Loader qw(check_mailrule line_in log_update select_descr);

my ( $target_irrelevant_grs, $target_irrelevant_grc ) =
  get_gruppen( mailrules_ident => 'target_irrelevant', 1 );

my ( $to_freetext_grs, $to_freetext_grc ) =
  get_gruppen( mailrules_ident => 'to_freetext', 1 );

sub add_mailrule($) {
	my ($id) = @_;

	my $quelle = line_in('Quelladresse: ') or return;

	if ( $quelle eq '*' ) {
		return problem('Bei diesem Kunden gibt es schon eine *-Umleitung.')
		  if DoFn(<<_);
	SELECT 1 FROM mailrules WHERE kunde = $id AND quelle IS NULL
_
		$quelle = undef;
	}
	else {
		$quelle = puny_encode( $quelle, 4 );
		if (
			my $nid = DoFn(
				'SELECT kunde FROM mailrules WHERE quelle = ' . qquote($quelle)
			)
		  )
		{
			return problem(
				    'Für diese Adresse existiert bereits eine Mail-Regel'
				  . ( $nid != $id && " bei Kunde #$nid:" . name_kunde($nid) )
				  . '.' );
		}
		unless ( my $nk = get_kunde($quelle) ) {
			warnung(<<'_');
Diese Domain ist noch keinem Kunden zugeordnet,
mx.noris.net wird dafür also gar keine E-Mails annehmen.
_
		}
		elsif ( $nk != $id ) {
			warnung(<<_);
Diese Domain ist dem Kunden #$nk:${\ name_kunde($nk) } zugeordnet;
möchtest Du die Umleitung (nicht) lieber da eintragen?
_
		}
		report_status();
	}

	defined( my $typ =
		  select_descr( mailrules => 128 | 1024, '', 'Typ', '!hide' ) )
	  or return;

	my $ziel;
	unless (
		test_gruppe(
			mailrules => $typ,
			$target_irrelevant_grs, $target_irrelevant_grc
		)
	  )
	{
		$ziel = line_in('Zieladresse: ') or return;
		$ziel = join ',', map puny_encode( $_, 4 ), split /\s*,\s*/, $ziel
		  unless test_gruppe(
			mailrules => $typ,
			$to_freetext_grs, $to_freetext_grc
		  );
	}

	check_mailrule( $quelle, $typ, $ziel ) or return;

	log_update(
		mailrules =>
		  kunde   => $id,
		undef,
		quelle => '*',
		undef,
		defined $quelle ? $quelle : '*'
	);
	Do(     "INSERT INTO mailrules SET kunde=$id, typ=$typ, quelle="
		  . qquote($quelle)
		  . ', ziel='
		  . qquote($ziel) );
}

1;
