use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(Do DoFn DoSelect qquote);
use Dbase::Globals qw(aufzaehlung content);
use Fehler qw(problem report_status warnung);
use Loader qw(line_in log_update list_person_domains);

sub get_adresse($;$) {
	my($kn,$oadrid) = @_;
	
	my($act,$adrid,$land);
	while(1) {
		my $prompt = 'Länderkürzel oder ID/Kurzname eines Adressobjekts';
		if($oadrid) {
			my $kurz = DoFn("select kurz from adresse where id=$oadrid");
			$prompt .= '[' . ( defined $kurz ? $kurz : $oadrid ) . ']:';
		}
		$prompt .= ':';
		$act = line_in $prompt;
		return unless defined $act;
		$act=$oadrid if $act eq "";
		return unless content $act;
		return "-" if $act eq "-";
		if($act eq "l") {
            my $len=0;
            my $res = DoSelect {
                my($kurz) = @_; 
                if(length($kn)+$len > 70) {
                        print "\n" if $len;
                        $len=0;
                } else {
                        print " " if $len;
                        $len ++; 
                }
                print "$kurz";
                $len += length($kurz);
			} "select kurz from adresse where kurz is not null order by kurz"
                or print "(keine)\n";
            print "\n" if $len; 
			next;
		}
		if($act =~ /^\d+$/) {
			$adrid = DoFn("select id from adresse where id=$act");
		} else {
			$adrid = DoFn("select id from adresse where kurz=${\qquote $act}");
		}
		return $adrid if $adrid;
		$land = DoFn("select id from land where iso2=${\qquote $act} or iso3=${\qquote $act} or kfz=${\qquote $act} or name=${\qquote $act}");
		last if $land;
		warn "Unter '$act' finde ich weder ein Land\nnoch eine existierende Adresse.\n";
	}

	content ( my $plz = line_in "PLZ:" ) or return;
	content ( my $ort = line_in "Ort:" ) or return;
	my $adr = "";
	while(1) {
		my $adr1 = line_in(($adr eq "") ? "Straße: " : "      : ");
		last if $adr1 =~ /^\s*$/;
		$adr1 =~ s/^\s+//;
		$adr1 =~ s/\s+\z//;
		$adr .= "\n" if $adr ne "";
		$adr .= $adr1;
		if($adr1 eq "-") {
			last if $adr eq "-";
			return undef;
		}
	}
	return undef if $adr eq "";
	my $strasse = $adr;
	$adrid = Do("insert into adresse set land=$land, strasse=${\qquote $strasse}, ort=${\qquote $ort}, plz=${\qquote $plz}");

	log_update("adresse","id",$adrid,undef,"*");
	return $adrid;
}

1;
