=head1 add_kunde_domain

Fügt eine neue Domain hinzu.

C<Flag&1>: auch den Tarif anlegen und die Einrichtung berechnen.

Flags:

=over 4

=item 1

Tarif mit anlegen

=item 2

Nicht in den Editor gehen

=back

=cut

use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_in domain_reg edit_domain set_domain_tarif log_update
	edit_deskrip);
use Dbase::Help qw(Do DoFn quote qquote DoTime);
use Dbase::Globals qw(
	get_reseller 
	name_kunde
	puny_encode
  );
use Fehler qw(problem);
use UTFkram qw(safe_encode_utf8);

my $ist_latin1 = 0;
my $ist_utf8 = 0;

sub add_kunde_domain($;$$$$$) {
	my($id,$flag,$kn,$domain,$datum,$tname) = @_;
	my $manuell = !defined($domain);
	print "Domain: $domain\n" if defined $domain;
	$domain = line_in "Domain: " unless defined $domain;

	my $idn = puny_encode($domain);
	if($domain eq $idn) {
		$idn = undef;
	} else {
		($domain,$idn)=($idn,$domain);
	}

	return undef if $domain =~ /^\d*$/;
	if($domain =~ /[^-\.0-9a-z]/i or $domain =~ /\.[\.-]/) {
		print <<END;
In Domainnamen sind nur Buchstaben, Ziffern und der Bindestrich erlaubt.
(Bindestriche in der Mitte, Ziffern nicht am Anfang (bei .de-Domains),
 nicht nur Ziffern, etc.pp.usw.usf.)
END
		return undef;
	}

	$datum = DoTime unless $datum;

	my($reg,$dien);
	domain_reg($domain,\$dien,\$reg); ## \$-Prototyp

	return problem
			"Für diese Domain '$domain' wurde kein NIC gefunden.\n",
			"Bitte anlegen (kunde 'd' und 'r')\n"
		unless $dien;

	$reg = "NULL" unless $reg;

	my ( $kf, $mail_ip ) =
	  DoFn("SELECT flags, mail_ip FROM kunde WHERE id = $id");
	my $rsn = get_reseller($id);

	# Wenn der Reseller vom Typ RRR ist und er einen domain-RRR-Tarif für
	# diesen Dienst hat, dann setze den künftigen Tarif für die Domain
	# auf selbigen. Oder (flag&1) lege ihn gleich an (altes
	# Reseller-Interface)
	if(defined $tname) {
		# tue nix
	} elsif(defined $rsn and DoFn("select count(*) from tarif,tarifklasse,tarifname where tarifname.id = tarifklasse.tarifname and tarifklasse.id=tarif.klasse and tarif.dienst = $dien and tarifname.name = 'domain-".quote($rsn)."'")) {
		$tname = "domain-$rsn";
	} else {
		$tname = undef;
	}

	my $qqdomain = qquote( lc $domain );
	if ( my($id,$kunde) = DoFn <<_ ) {
	SELECT id, kunde
	FROM   domainkunde
	WHERE  domain = $qqdomain
	   AND ( ende IS NULL OR ende >= UNIX_TIMESTAMP(NOW()) )
_
		return problem "Diese Domain gibt es schon als #$id bei Kunde #$kunde (" . name_kunde($kunde) . ').';
	}
	my $tnid;
	if(defined $tname and $tname ne "" and $tname ne "-") {
		$tnid = DoFn("select id from tarifname where name=${\qquote $tname}");
	} else {
		$tnid = "NULL";
	}
	my $idi = Do(<<_);
	INSERT INTO domainkunde SET
		beginn    = $datum,
		domain    = $qqdomain,
		kunde     = $id,
		mail_ip   = ${\ qquote($mail_ip) },
		nic       = $reg,
		tarifname = $tnid
_
	log_update("domainkunde","id",$idi,undef,"domain","*",undef,$domain);

	if($flag & 1) {
		my $tarif = $tname || "domain";
        	set_domain_tarif($idi,$kn,$tarif);
	}

	log_update("kunde","id",$id,undef,"domain","*",undef,$idi);
	Do("update kunde set geaendert=UNIX_TIMESTAMP(NOW()) where id = $id");
	return edit_domain($idi,$id,$kn) unless $flag & 2;
	$idi;
}

1;
