=head1 domain_reg

Diese Funktion liest zu einer Domain den eingetragenen Dienst,
Registrar, und den Default-TechC und -ZoneC und -BillC, und
whois-Serverdaten.

Sie liefert 1, wenn alle gewünschten Werte gefunden wurden, ansonsten 0.

Parameter:

=over 4

=item Domain-ID oder -Name

=item Dienst

=item Registrar

=item Personen-ID des Besitzers, Admin-C, Tech-C und Zone-C

=back

Bis auf den ersten Wert werden alle Parameter implizit als Referenz
übergeben und automatisch mit den entsprechenden Werten gefüllt.

=cut

use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(DoFn qquote);
use Dbase::Globals qw(find_reseller puny_decode);

# als Domain kann entweder eine Domainnummer oder der Domainname
# übergeben werden.
## Bei IDNs ist letzterer kodiert!
sub domain_reg($;$$$$$$$$$) {
	my($dom,$dienst,$nic,$owner,$adminc,$techc,$zonec,$billc,$whois,$handle_re) = @_;
	my($di,$prio,$kunde,$ni,$ow,$ad,$te,$zo,$bi,$wh,$hr);
	
	if($handle_re and not $$handle_re and not $nic) {
		my $x;
		$nic = \$x;
	}

	if($dom =~ /^\d+$/) {
		($dom,$ni,$kunde,$ow,$ad,$te,$zo,$bi) = DoFn("select domain,nic,kunde,owner,adminc,techc,zonec,billc from domainkunde where id = $dom");
		return undef unless $dom ne "";
		my $prio = 0;
		$$nic = $ni if ref $nic and not $$nic;
		$$owner = $ow if ref $owner and not $$owner;
		$$adminc = $ad if ref $adminc and not $$adminc;
		$$techc = $te if ref $techc and not $$techc;
		$$zonec = $zo if ref $zonec and not $$zonec;
		$$billc = $bi if ref $billc and not $$billc;
	}
	my $idn = ($dom ne puny_decode($dom));
	my $reseller = $kunde ? find_reseller($kunde) : undef;

	# Dieser Code sucht nach bla.fasel-idn bla.fasel fasel-idn fasel,
	# in dieser Reihenfolge.
	my $do_idn=($idn ? "-idn" : "");
	while(1) {
		last if (not ref $dienst or $$dienst) and
		        (not ref $nic or $$nic) and
				(not ref $techc or $$techc) and
				(not ref $zonec or $$zonec) and
				(not ref $billc or $$billc) and
				(not ref $whois or $$whois) and
				(not ref $handle_re or $$handle_re);
		if($do_idn)  {
			$do_idn="";
		} else {
			last unless $dom =~ s/^[^.]+?\.//;
			$do_idn=($idn ? "-idn" : "");
		}
		my($dien,$ni,$te,$zo,$bi,$wh) = DoFn("select dienst,nic,techc,zonec,billc,whoisserver from domreg where domain = ${\qquote($dom.$do_idn)}");

		my $hr;
		$hr = DoFn("select handle_re from nicdata where nic=$nic") if $nic and ref $handle_re and not $$handle_re;

		$$dienst ||= $dien if ref $dienst;
		$$nic ||= $ni if ref $nic;
		$$techc ||= $te if ref $techc;
		$$zonec ||= $zo if ref $zonec;
		$$billc ||= $bi if ref $billc;
		$$whois ||= $wh if ref $whois;
		$$handle_re ||= $hr if ref $handle_re;
	}

	$$owner = DoFn("SELECT hauptperson FROM kunde WHERE id = $kunde")
	  if ref $owner && !$$owner;

	$$adminc = DoFn("SELECT adminc FROM kunde WHERE id = $kunde")
	  if ref $adminc && !$$adminc;

	1;
}

1;
