use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_in line_printer);
use Dbase::Help qw(DoSelect DoTime);
use Dbase::Globals qw(bignum find_descr get_descr name_kunde);

my $flagmask_kunde_eigene_re = bignum(1) << find_descr( kunde => eigene_re => 1 );

sub list_kunden(;$$\@) {
	my($kn,$all,$ids) = @_;

	if($all) {
		$all = "";
	} else {
		$all = "where (ende is NULL or ende > UNIX_TIMESTAMP(NOW()))";
	}

	$all .= (length $all ? 'and ' : 'where ') . (@$ids && "id IN (${\join ',', @$ids})") if ref $ids;

	line_printer;
	my $hdr;

	my $res = DoSelect {
		my($kunde,$ende,$id,$zuletzt,$berechne,$uk,$flags) = @_;
		$zuletzt=0 unless $zuletzt;

		print $Db::pr_fh <<END unless $hdr++;
Nr.  Kunde                Oberkunde                  zuletzt Berechnung
==============================================================================
END
		if($ende) {
			if($ende > DoTime) {
				$kunde = "<$kunde>";
			} else {
				$kunde = "($kunde)";
			}
		}

		goto out unless
		printf $Db::pr_fh "%4d %-20s %-26s %s\n",
		                  $id,
		                  $kunde,
		                  $uk ? sprintf( '#%4d:%s', $uk, name_kunde($uk) ) : '',
		                  !$uk || $flags & $flagmask_kunde_eigene_re
		                  ? sprintf( '%4s-%2s %s', $zuletzt ? $zuletzt =~ /(.*)(..)$/ : ('',''), get_descr( intervall => $berechne ) )
		                  : '';

	} "select name,ende,id,zuletzt,berechne,kunde,flags from kunde $all order by name"
		or print "(leer)\n";

out:
	$res;
}

1;
