use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(name_dienst in_period timerange content
	name_kunde);
use Dbase::Help qw(DoFn DoSelect isotime in_list);
use List::Util qw(max);
use Loader qw(line_printer);

# Flag&1: Tarifbeschreibungen mit ausgeben
# Flag&2: auch beendete Tarife

sub list_ktarife($;$$@) {
	my($id,$kn,$flags,@where) = @_;
	$flags = 0 unless defined $flags;
	line_printer;

    my $mehrere_kunden;
    if ( ref $id ) {
        push @where, in_list( "tarifkunde.kunde" => '', @$id ); 
        $mehrere_kunden = 1;
    } 
    elsif ( defined $id ) {
        push @where, "tarifkunde.kunde = $id";
    }
    else {
        $mehrere_kunden = 1;
    }

	unless($flags & 2) {
		push @where,"(tarifkunde.ende is NULL or tarifkunde.ende > UNIX_TIMESTAMP(NOW()))";
	}
	my $hdr;
	my $res = DoSelect {
		print $Db::pr_fh $mehrere_kunden ? <<END : <<END unless $hdr++;
  Nr. ## Kunde      Tarif
END
  Nr. ## Tarif
END

		my($tari,$name,$anzahl,$dienst,$beginn,$ende,$notiz,$info,$tarif,$kunde) = @_;
		$info = "" unless content $info;

		if($mehrere_kunden) {
				goto out unless
			printf $Db::pr_fh "%5d %2d %-10s %s/%s %s %s %s\n",$tari,$anzahl,name_kunde($kunde),$name,name_dienst($dienst),$info,timerange($beginn,$ende),($notiz ? " zuletzt ".isotime $notiz : "");
		} else {
				goto out unless
			printf $Db::pr_fh "%5d %2d %s/%s %s %s %s\n",$tari,$anzahl,$name,name_dienst($dienst),$info,timerange($beginn,$ende),($notiz ? " zuletzt ".isotime $notiz : "");
		}
		if ( $flags & 1 ) {
			my %f;
			( @f{qw(BetriebsZeit ServiceZeit WartungsFenster)}, my $description ) = DoFn <<_;
	SELECT   tarif.betriebszeit, tarif.servicezeit, tarif.wartungsfenster, tarif.description
	FROM     tarif,tarifklasse
	WHERE    tarifklasse.tarifname = $tarif AND tarif.dienst = $dienst
	     AND tarifklasse.id=tarif.klasse
	     AND ( tarifklasse.kunde = $kunde OR tarifklasse.kunde IS NULL )
	ORDER BY tarifklasse.kunde DESC, tarif.beginn DESC
	LIMIT    1
_
			if ( defined $description && length $description ) {
				$description =~ s/^/= /gm;
				chomp $description;
				print $Db::pr_fh "$description\n";
			}
			my $maxlength = max map length, grep defined, values %f;
			++$maxlength;
			defined $f{$_}
			  and printf $Db::pr_fh "| %-15s: %s%s\n",
			             $_,
			             $f{$_},
			             in_period($f{$_}) ? ( ' ' x ( $maxlength - length $f{$_} ) ) . '(JETZT!)' : ''
			  for sort keys %f;
		}
	} <<_
		select tarifkunde.id, tarifname.name, tarifkunde.anzahl, tarifkunde.dienst,
		       tarifkunde.beginn, tarifkunde.ende, tarifkunde.notiz, tarifkunde.infotext, tarifkunde.tarifname, tarifkunde.kunde
		  from tarifname,tarifkunde
		 where tarifname.id = tarifkunde.tarifname
		   ${\ (@where > 0 && ' AND ' . join ' AND ', @where) }
		 order by tarifkunde.kunde,tarifname.name,tarifkunde.id
_
		or print "(leer)\n";
	print $Db::pr_fh "Der Kunde hat kundenspezifische Tarife! (Auflisten mit 'lt'.)\n"
		if DoFn(ref($id) ? <<_ : $id ? <<_ : <<_) > 0;
			select count(*) from tarifklasse where ${\ in_list( "kunde" => '', @$id ) };
_
			select count(*) from tarifklasse where kunde = $id
_
			select count(*) from tarifklasse where kunde is NOT NULL
_
out:
	$res;
}

1;

