use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(get_descr in_period name_kunde timerange sdaterange
	name_dienst);
use Dbase::Help qw(DoFn DoSelect isotime isodate);
use Fehler qw(problem);
use List::Util qw(max);
use Loader qw(line_printer);

sub list_ktarif($$;$) {
	my($tari,$kn,$flags) = @_;
	$flags=0 unless defined $flags;
	line_printer;

	DoSelect {
		my($timestamp,$name,$kunde,$anzahl,$dienst,$beginn,$ende,$ablauf,$notiz,$info,$rechnung,$nextrech,$tnid) = @_;

		my $spez=0;
		my $tkl = DoFn("select id from tarifklasse where tarifname=$tnid and kunde=$kunde");
		if($tkl) {
			$spez=1;
		} else {
			$tkl = DoFn("select id from tarifklasse where tarifname=$tnid and kunde is null");
		}
		print $Db::pr_fh "ID       : $tari\n";
		print $Db::pr_fh "Timestamp: ".isotime($timestamp)."\n";
		print $Db::pr_fh "Tarif    : $name/".name_dienst($dienst)."\n";
		print $Db::pr_fh "Kunde    : #$kunde:".($kunde?name_kunde($kunde):"NULL")."\n";
		print $Db::pr_fh "Anzahl   : $anzahl\n" if $anzahl =~ /^\d+$/;
		print $Db::pr_fh "Bestell  : ".timerange($beginn,$ende)."\n" if $beginn or $ende;
		print $Db::pr_fh "Ber.ab   : ".isotime($nextrech)."\n" if $nextrech;
		print $Db::pr_fh "Nutzung  : ".isotime($notiz)."\n" if $notiz;
		print $Db::pr_fh "Ablauf   : ".isotime($ablauf)."\n" if $ablauf;
		print $Db::pr_fh "Info     : ".join("\n         : ",split(/\|/,$info))."\n" if $info;
		{
			my $description = DoFn "SELECT description FROM tarif WHERE klasse = $tkl AND dienst = $dienst ORDER BY beginn DESC LIMIT 1";
			if ( defined $description && length $description ) {
				$description =~ s/\n(?=.*\S)/\n           /g;
				chomp $description;
				print $Db::pr_fh "Beschreib: $description\n";
			}
		}
		print $Db::pr_fh "Hinweis  : kundenspezifischer Tarif\n" if $spez;
		DoSelect {
			my($hash,$seq,$ai,$jjmm,$tt)=@_;
			my $jmt = sprintf "%04d-%02d-%02s",int($jjmm/100),$jjmm%100,$tt;
			print $Db::pr_fh "Aufwand  : $jmt: $hash-$seq: ".get_descr("acctinfo",$ai)."\n";
		} "select acctassoc.hash,acctassoc.seq,acctassoc.acctinfo,acct.jjmm,acct.tt from acctassoc,acct where acctassoc.tarifkunde=$tari and acct.hash=acctassoc.hash and acct.seq=acctassoc.seq order by acctassoc.id";
		print $Db::pr_fh "Aufwand  : berechnet ($rechnung)\n" if $rechnung;
		if ($flags & 2) {
			DoSelect {
				my($rnr,$anz,$wann,$beginn,$ende) = @_;
				print $Db::pr_fh "Rechnung : $rnr ".sprintf("%5.2f",$anz/100)."  ".isodate($wann).": ".sdaterange($beginn,$ende,1)."\n";
			} "select knextrech.rnr,nextrech.anzahl,rechnungen.datum,nextrech.beginn,nextrech.ende from nextrech,knextrech,rechnungen where rechnungen.rnr=knextrech.rnr and nextrech.tarifkunde=$tari and nextrech.knextrech=knextrech.id order by knextrech.rnr"
				or print $Db::pr_fh "Rechnung : - bisher nicht berechnet -\n";
		}
		if ($flags & 1) {
			my %f;
			( @f{qw(BetriebsZeit ServiceZeit WartungsFenster)}, my $description ) = DoFn <<_;
	SELECT   betriebszeit, servicezeit, wartungsfenster, description
	FROM     tarif
	WHERE    klasse = $tkl AND dienst = $dienst
	ORDER BY 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 "| %-15s: %s%s\n",
			             $_,
			             $f{$_},
			             in_period($f{$_}) ? ( ' ' x ( $maxlength - length $f{$_} ) ) . '(JETZT!)' : ''
			  for sort keys %f;
		}
	} "select tarifkunde.timestamp,tarifname.name, tarifkunde.kunde,tarifkunde.anzahl,tarifkunde.dienst,tarifkunde.beginn,tarifkunde.ende,tarifkunde.ablauf,tarifkunde.notiz,tarifkunde.infotext,tarifkunde.rechnung,tarifkunde.nextrech,tarifname.id from tarifname,tarifkunde where tarifname.id = tarifkunde.tarifname and tarifkunde.id = $tari"
		or problem "Kundentarif '$tari' unbekannt.";
}
1;
