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

use Dbase::Globals qw(
	bignum
	content
	find_descr
	flag_names
	get_descr
	get_gruppen
	get_person
	kpersinfo
	list_descr
	test_gruppe
  );
use Dbase::Help qw(Do DoFn);
use Fehler qw(hat_problem problem warnung);
use Loader qw(line_in edit_personen log_update select_descr edit_person
	add_person);

sub add_kunde_person($;$$$) {
	my($id,$kn,$dienst,$prio) = @_;

	$dienst = select_descr( dienst => 1024|262144, '','', '!hide' ) unless defined $dienst;
	return undef unless defined $dienst;

	content( $prio = line_in( 'Priorität>', 0, undef, 0 ) ) or return
		unless defined $prio;
	return problem('Die Priorität muss eine ganze Zahl zwischen 0 und 99 sein.')
	  if $prio !~ /^\d{1,2}\z/;
	
	content( my $pers = line_in($id ? "Person ('n': neu): " : "Person: ") )
		or return;

	my $act;
	if($pers eq "n") {
		return problem "Neuanlegen geht hier nicht!\n"
			if $id == 0;
	} elsif(not defined($act = get_person($pers))) {
		return problem('Person unbekannt.');
	}

	return problem 'Die Person gibt es hier schon mit identischem Dienst.'
		if $pers ne 'n' &&
		   DoFn "SELECT count(*) FROM kundemail WHERE kunde=$id AND dienst=$dienst AND person=$act";

	if($pers eq "n") {
		$act = add_person($id,$kn);
		return unless $act;
	}

	list_descr(
		dienst_ident => undef,
		undef,
		sub {
			my ( $ident, $num_id, $name, $info ) = @_;
			my ($attr) = $name =~ /^requires_(\w+)\z/i or return;
			my ( $grs, $grc ) = get_gruppen( dienst_ident => $name, 1 );
			problem($info)
			  if test_gruppe( dienst => $dienst, $grs, $grc )
			  && !defined( DoFn("SELECT $attr FROM person WHERE id = $act") );
		}
	);
	return if hat_problem();
	
	log_update("kundemail","kunde",$id,undef,"person","dienst","dringend","*",undef,$act,get_descr("dienst",$dienst),$prio);
	Do("insert into kundemail set kunde=$id, dienst=$dienst, dringend=$prio, person=$act");

	if ( defined( my $flag_no_tts = find_descr( kunde  => 'no_tts' ) ) &&
	     defined( my $dienst_tt   = find_descr( dienst => 'tt'     ) )
	   ) {
	   	$flag_no_tts = bignum(1) << $flag_no_tts;
		if ( $dienst == $dienst_tt && ( my $flags = DoFn(<<_) ) ) {
			SELECT flags FROM kunde WHERE id = $id AND flags & $flag_no_tts != 0
_
			my $old_flags = $flags = bignum($flags);
			$flags &= ~$flag_no_tts;
			log_update( kunde => id => $id, undef, flags => undef, scalar flag_names( $flags, 'kunde', $old_flags ) );
			Do("UPDATE kunde SET flags=$flags WHERE id = $id");
			warnung('Ich habe das no_tts-Flag bei diesem Kunden gelöscht.');
		}
	}

	$act;
}

1;
