use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(find_descr);
use Dbase::Help qw(Do DoFn DoSelect quote isotime DoTime);
use Fehler qw(problem warnung);
use Loader qw(check_overlap domain_check_mx log_update select_date);

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

	my($id, $domain, $beginn, $ende) = DoFn("select kunde, domain, beginn, ende from domainkunde where id=$idi");
	$ende=0 if not defined $ende;
	my $done;
	my $neu_beginn = select_date(   256     , 'Startdatum', undef, qw(- jetzt             ));
	unless ( defined $neu_beginn ) { $neu_beginn = $beginn }
	elsif ( $neu_beginn eq '-'   ) { $neu_beginn = DoTime  }

	my $neu_ende   = select_date(16|256|1024, 'Enddatum'  , undef, qw(- jetzt 0 unbegrenzt));
	unless ( defined $neu_ende ) { $neu_ende = $ende  }
	elsif ( $neu_ende eq '-'   ) { $neu_ende = DoTime }

	return problem 'Das Enddatum darf nicht vor dem Startdatum liegen.' if $neu_ende and $neu_beginn > $neu_ende;
	if (my $id = check_overlap domainkunde=>id=>$idi, 'domain', $neu_beginn, $neu_ende) {
		return problem "Diese Daten können nicht gesetzt werden, da sich dadurch eine zeitliche Überschneidung mit Domain #$id ergeben würde.";
	}
	if ($neu_beginn != $beginn) {
		log_update("domainkunde","id",$idi,undef,"beginn",undef,scalar isotime $beginn);
		Do("update domainkunde set beginn=$neu_beginn where id=$idi");
		Do("update kunde set geaendert=UNIX_TIMESTAMP(NOW()) where id=$id") if $id > 0;
		$done += 2;
	}
	if ($neu_ende != $ende) {
		if ( $neu_ende and !$ende || $neu_ende < $ende ) {
			my $qdomain = quote $domain;
			DoSelect {
				my($kunde_id, $kunde_name, $email) = @_;
				warnung("Unter dieser Domain existiert bei Kunde #$kunde_id:$kunde_name noch eine Mail-Regel für <$email>.");
			} <<_;
	SELECT   kunde.id, kunde.name, mailrules.quelle
	FROM     kunde, mailrules
	WHERE    kunde.id = mailrules.kunde
	     AND ( kunde.ende IS NULL                  OR
	           kunde.ende >= UNIX_TIMESTAMP(NOW()) )
	     AND ( mailrules.quelle LIKE '%\@$qdomain' OR
	           mailrules.quelle LIKE  '%.$qdomain' )
	ORDER BY kunde.name, mailrules.quelle
_
			return unless domain_check_mx( $domain, 'beenden', 'beendet' );
		}
		log_update("domainkunde","id",$idi,undef,"ende",undef,scalar isotime DoFn "select ende from domainkunde where id=$idi");
		$neu_ende="NULL" if $neu_ende == 0;
		if (
			defined(
				my $kt = DoFn("SELECT ktarif FROM domainkunde WHERE id = $idi")
			)
		  )
		{
			log_update("tarifkunde","id",$kt,undef,"ende",
				scalar isotime $ende);
			Do("update tarifkunde set ende=$neu_ende where id=$kt and ( ende is NULL or ende > $neu_ende )");
			print "...Bitte den zugehörigen Tarif überprüfen.\n";
		} else {
			print "...Dieser Domain ist kein Tarif zugeordnet.\nBitte ggf. suchen, zuordnen, und beenden!\n";
		}
		Do("update domainkunde set ende=$neu_ende where id=$idi");
		Do("update kunde set geaendert=UNIX_TIMESTAMP(NOW()) where id=$id") if $id > 0;
		$done++;
	}
	$done;
}

1;
