use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(DoFn qquote);
use Dbase::Globals qw(name_dienst get_kunde);
use Loader qw(line_in select_descr acct_info edit_dienste);

sub acct_list($;$$) {
	my($id,$kn,$flag) = @_;
	my($knd);
	my($quelle,$dienst,$ziel,$jjmm,$tt);
	my($j1,$j2);
	my($t1,$t2);
	my(%vx); # kontonr => [ descr, betrag ]

	if($id) {
		$knd = $id;
	} else {
		while(1) {
			$knd = line_in "Kunde >"; return undef if $knd eq "";
			if($knd eq "?") {
				print <<'END';
-        Alle Kunden, zusammengefasst
*        Alle Kunden, einzeln
*JJJJMM  Alle Kunden, aber bis max. JJJJMM
x#       Alle Kunden, nach Xlink-Kundennummer # (# leer: alle)
NAME     Kundenname
END
				next;
			}
			if($knd eq "-" or $knd eq "*") {
				last;
			}
			my $kund;
			if($kund = get_kunde($knd)) {
				$knd = $kund;
				last;
			}
			print "Kunde '$knd' unbekannt!\n";
		}
	}
	while(1) {
		$jjmm = line_in "Zeitraum >"; return undef if $jjmm eq "";
		if($jjmm eq "?") {
			print <<'END';
*       Alle Monate, einzeln
-       Alle Monate, zusammengefasst
JJJJMM  Jahr und Monat
XX=YY   von-bis, einzeln
XX-YY   von-bis, zusammengefasst
END
			next;
		}
		if($jjmm eq "-") {
			$jjmm = "";
			last;
		}
		if($jjmm =~ /^(\d{4,6})?([=-])(\d{4,6})?$/) {
			$j1 = $1; $j2 = $3;

			if($j1 =~ /^\d{4,5}$/) { $j1 += 190000; }
			if($j2 =~ /^\d{4,5}$/) { $j2 += 190000; }

			(print "Das kann nicht funktionieren...\n"),return undef if $j1 > $j2 and $j2 > 0;
			last;
		}
		if($jjmm eq "*") {
			last;
		}
		if($jjmm =~ /^\d{4,5}$/) {
			$jjmm += 190000;
		}
		if($jjmm =~ /^\d{6}$/) {
			$j1 = $j2 = $jjmm;
			last;
		}

		print "Jahr/Monat '$jjmm' ungültig!\n";
	}
	while(1) {
		$tt = line_in "Tag >"; return undef if $tt eq "";
		if($tt eq "?") {
			print <<'END' if $jjmm ne "";
*     Alle Tage, einzeln
END
			print <<'END';
-     Alle Tage, zusammengefasst
TT    Tag
T1=T2 von T1 bis T2, einzeln
T1-T2 von T1 bis T2, zusammengefasst
END
			next;
		}
		if($tt eq "-") {
			$tt = ""; $t1 = 1; $t2 = 31;
			last;
		}

		if($tt =~ /^(\d\d?)?([=-])(\d\d?)?$/) {
			$t1 = $1; $t2 = $3;
			if($t1 > $t2 and $t2 > 0) {
				(print "Das kann nicht funktionieren..."),return undef unless $j1 < $j2;
			}
			if($t1 !~ /^\d\d?$/) {
				$t1 = 1;
			}
			if($t2 !~ /^\d\d?$/) {
				$t2 = 31;
			}
			if($jjmm =~ /-/) {
				print "Das geht nicht, wenn Jahr/Monat zusammengefasst wird.\n";
				next;
			}
			last;
		}
		if($tt eq "-") {
			$tt = "";
			last;
		}
		if($tt eq "*") {
			if($jjmm eq "" or $jjmm =~ /-/) {
				print "Das geht nicht, wenn Jahr/Monat zusammengefasst wird.\n";
				next;
			}
			last;
		}
		if($tt > 0 and $tt <= 31) {
			last;
		}

		print "Tag '$tt' ungültig!\n";
	}

	$quelle = select_descr("quelle",1+4+8,<<END,"","!hide");
"Quelle" gibt an, welches Subsystem die Accountingdaten geliefert hat.

*     Alle Quellen, einzeln
-     Alle Quellen, zusammengefasst
END
	return undef unless defined $quelle;

	if($quelle eq "-") {
		$quelle = "";
	}

	$dienst = edit_dienste(1+4+8,"",<<END);
*     Alle Dienste, einzeln
-     Alle Dienste, zusammengefasst
END
	return undef unless defined $dienst;
	if($dienst eq "-") {
		$dienst = $ziel = ''; # Dienst "-" impliziert Ziel "-", vgl. RT#122717
	} else {
		$ziel = (length $dienst > 1 && DoFn("select count(*) from descr,descr_typ where descr_typ.id = descr.typ and descr_typ.name = ${\qquote(name_dienst $dienst)}") > 0) ? name_dienst $dienst : 'ziel';
		$ziel = select_descr($ziel,4+($dienst ne "" ? 8 : 0), <<END.($dienst ne "" ? <<END : ""),"","!hide");
-    Alle Ziele, zusammengefasst
END
*    Alle Ziele, einzeln
END
		return undef unless defined $ziel;
		$ziel = '' if $ziel eq '-';
	}

	if ( $knd =~ /^\d+\z/ && $knd > 0 ) {
		my $nx = DoFn("select count(*) from tarifacct where dkunde = $knd");
		print "\nAchtung: andere Kunden könnten auf diesen Kunden accounten. Siehe 'tt'.\n\n" if $nx;
	}

	acct_info ($jjmm,$tt,$quelle,$dienst,$ziel,$knd,$flag);
}

1;
