use utf8;
use warnings; no warnings "redefine";
use strict;
use Carp;
use Dbase::Globals qw(find_descr unterkunden get_person);
use Dbase::Help qw(Do DoFn qquote);

sub ticket_has_mail($$;$$) { # Ticket, Adresse/Person, letztes-Ticket
							 # work&1: updaten, &2: anlegen
							 # work&8: Requestor (RT)
							 # work&16: RESTRICT auf 'echte' Mailadressen
# Wenn die Person/Adresse ein Ticket mit jener Folgenummer
# hat >= 0.
# Wenn Nummer kleiner und work&1 => update, => 1.
# Wenn nicht vorhanden und work&2 => lege an, => 2.
# Ansonsten => undef.

	my($tid,$adr,$tnr,$work) = @_;
	$tnr = 0 if $tnr == 0;
	my $ldr;

	if($adr !~ /^\d+$/) { ## das ist kein Personeneintrag, mal gucken
		$ldr = DoFn("select 0 from ticketadr where ticket = $tid and email = ${\qquote $adr}" );
		if(defined $ldr) {
			Do("update ticketadr set marker = 'x' where ticket = $tid and email = ${\qquote $adr}") if ($work & 8);
			return 0 if $ldr >= $tnr;
			return 1;
		}

		# Adressen aus dem RT werden nicht umgesetzt
    	my $nadr = ($work & 8) ? 0 : ($work & 16 and $adr =~ /@/)
			? get_person($adr,"mail,pop,?email",1) : get_person($adr);
		unless($nadr) {
			confess "BadAddress" if $adr =~ /\@$/;
			Do("INSERT INTO ticketadr SET ticket=$tid, email=${\qquote $adr}, marker=".(($work&8)?"'x'":"NULL")) if $work & 2;
			return 2;
		}
		$adr = $nadr;
	}

	$ldr = DoFn("select 0 from ticketadr where ticket = $tid and person = $adr" );

	if(defined $ldr) {
		Do("update ticketadr set marker = 'x' where ticket = $tid and person = $adr") if ($work & 8);
		return 0 if $ldr >= $tnr;
		return 1;
	}
	### POP, oder dessen Unterkunde?
	my $kn = DoFn("select kunde from person where id = $adr and ".unterkunden(1,"kunde"));
	Do("INSERT INTO ticketadr SET ticket=$tid, person=$adr, marker=".(($work & 8) ? "'x'" : "NULL")) if $work & 2;
	return 2;
}

1;
