use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(find_descr);
use Dbase::Help qw(DoFn DoSelect DoTime);
use Fehler qw(problem report_status warnung);
use File::Temp qw(tempfile);
use IO::File;
use Loader qw(check_perm export_fibunet export_fibunet_datum line_in valid_kunde);

sub export_mangle_name($) {
    my ($adr) = @_;
    my($res,$anrede,$akey);
    if($adr =~ s/^(Herr|Frau)\s+//) {
        my $was = $1;

        $res = $adr;
        my $an = " ";
        while($adr =~ s/^(Dr\.|Doktor|Prof\.|Professor)\s+//) {
            $an .= "$1 ";
        }
        1 while($adr =~ s/[A-ZÄÖÜ][-A-Za-zäöüß\.]+\s+(?=[A-ZÄÖÜ])//);

        if($was eq "Herr") {
            # $was = "r Herr";
            $akey = 3;
        } else {
            # $was = " Frau";
            $akey = 2;
        }
        # $anrede = "Sehr geehrte${was}${an}$adr";
    } else {
        $res = $adr;
        # $anrede = "Sehr geehrte Damen und Herren";
        $akey = 5;
    }
    ($res,$akey);
}

sub export_kunde($;$$) {
	my($id,$flag,$kn)=@_;

	return undef unless valid_kunde($id,1);
	return undef unless check_perm("verwaltung");

	export_fibunet( sub {
		my $res = "";

		DoSelect {
			my($oberkunde,$name,$zziel,$anfang,$ende,$ustid) = @_;
			my $lid=10000+$id;
			my $anf = export_fibunet_datum($anfang);
			my $end = export_fibunet_datum($ende);
			$zziel=14 unless $zziel;
			$ustid="" unless defined $ustid;

			my $akey;

			my($kmain,$kbill,$kadmin) = DoFn("select hauptperson,billc,adminc from kunde where id=$id");

			if(not $kmain) {
				return problem "Kein Name für Kunde #$id:$name gefunden." if not $oberkunde and (not $ende or $ende > DoTime()) and DoFn("select count(*) from tarifkunde where kunde=$id and anzahl>0 and (ende is null or ende>UNIX_TIMESTAMP(NOW()))");
				return undef; # ignoriere Unterkunden ohne Name/Adresse/etc.
			}

			my($strasse,$land,$plz,$ort,$email,$adm);

			my($adr,$adr1,$adr2);
			my($pers,$persl);

			my $kontobez = DoFn("select name from person where id=$kmain");

			if($kbill and $kbill != $kmain) {
				$adm = DoFn("select name from person where id=$kbill");
			}
			if($kadmin and $kadmin != $kmain and not defined $adm) {
				$adm = DoFn("select name from person where id=$kadmin");
			} else {
				$kadmin = $kmain;
			}
			($kontobez,$akey) = export_mangle_name($kontobez)
				if defined $kontobez;

# rt#338293: diese Adresse wird beim Rechnungschreiben nicht verwendet
#			$strasse = DoFn("select adresse from person where id=$kbill")
#				if $kbill;
			$strasse = DoFn("select adresse from person where id=$kmain")
				unless defined $strasse;
			$strasse = DoFn("select adresse from person where id=$kadmin")
				unless defined $strasse;
			warnung("keine Adresse in Kunde #$id"),return unless defined $strasse;

			$email = DoFn("select email from person where id=$kbill")
				if $kbill;
			$email = DoFn("select email from person where id=$kadmin")
				unless defined $email;
			$email = DoFn("select email from person where id=$kmain")
				unless defined $email;

			my $kontonummer = 10000+$id; 
			my $eu;
			($strasse,$land,$plz,$ort,$eu) = DoFn("select adresse.strasse,land.iso2,adresse.plz,adresse.ort,land.eu from adresse,land where adresse.id=$strasse and land.id=adresse.land") if $strasse;
			$strasse =~ s/\|+/;/g;
			$land = uc $land;

			my($blz,$bankkonto,$bankname) = DoFn("select blz,kontonr,name from konten where kunde = $id");

			# Trennung von Variablen-Deklaration und bedingter
			# Initialisierung wichtig, vgl. RT#244828:
			my $abt;
			$abt = DoFn("select abt from person where id=$kbill")
				if $kbill;
			$abt = DoFn("select abt from person where id=$kmain")
				unless defined $abt;
			$abt = DoFn("select abt from person where id=$kadmin")
				unless defined $abt;

			my $ausl = lc $land eq "de" ? 0 : $eu eq "n" ? 2 : 1;
			$name = "_$name" if length($name) == 2 or $name =~ /^\d/;

			$abt="" if not defined $abt;
			$adm="" if not defined $adm;
			$strasse="" if not defined $strasse;
			$kontobez="" if not defined $kontobez;

			$res .= <<END;
( ):2010;0;$lid;"$name";;;$ausl;;;;;;;;;;;;;$end
( ):2011;"$kontobez";"$abt";"$strasse";"$land";$plz;"$ort";;;"$adm"
END
			if($blz) {
				$res .= <<END;
( ):2012;$bankkonto;$blz;$zziel;4
END
			} else {
				$res .= <<END;
( ):2012;;;$zziel;3
END
			}
			
			$email="" if not defined $email;
			$ustid="" if not defined $ustid;
			$adm="" if not defined $adm;
			$bankname="" if not defined $bankname;

			$res .= <<END;
( ):2013;"$ustid";;;;;;"$anf"
( ):2014;"$adm";;;;;;;;;"$email";"$bankname";$akey
END
		} "select kunde,name,zahlung,beginn,ende,steuernr from kunde where id = $id";
		$res;
	}, "Stammdaten Kunde #$id",$flag,$kn );
}

1;
