use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(
  get_descr
  info_descr
  ipinfo
  mpersinfo
  name_kunde
  timerange
);
use Dbase::Help qw(DoSelect isotime);
use Fehler qw(problem);
use Loader qw(line_printer);

my $print_hardware = sub {
	my ( $key, $id, $name, $ip ) = @_;

	print $Db::pr_fh "Hardware $key-E. : #$id: $name"
	  . ( defined $ip && "\n -> primäre IP: " . ipinfo($ip) ) . "\n"
	  if $id;
};

sub list_leitung($;$) {
	my ( $idi, $flags ) = @_;
	$flags = 0 unless defined $flags;
	line_printer;

	DoSelect {
		my (
			$kunde,           $name,          $art,
			$carrier,         $name_carrier,  $name_kunde,
			$a_ende,          $a_hardware,    $a_hardware_name,
			$a_hardware_ip,   $b_ende,        $b_hardware,
			$b_hardware_name, $b_hardware_ip, $backup,
			$beginn,          $ende,          $timestamp,
		) = @_;

		print $Db::pr_fh "ID            : $idi\n";
		print $Db::pr_fh 'Timestamp     : ' . isotime($timestamp) . "\n";
		print $Db::pr_fh "Kunde         : #$kunde:" . name_kunde($kunde) . "\n"
		  if $kunde;
		print $Db::pr_fh "Name          : $name\n";
		if ( defined $art ) {
			my $info = info_descr( leitungsart => $art );
			print $Db::pr_fh 'Art           : '
			  . get_descr( leitungsart => $art )
			  . ( defined $info && ": $info" ) . "\n";
		}
		print $Db::pr_fh "Carrier       : #$carrier:" . mpersinfo($carrier) . "\n" if defined $carrier;
		print $Db::pr_fh "Name \@ Carrier: $name_carrier\n" if defined $name_carrier;
		print $Db::pr_fh "Name \@ Kunde  : $name_kunde\n" if defined $name_kunde;
		print $Db::pr_fh "A-Ende        : #$a_ende:" . mpersinfo($a_ende) . "\n" if $a_ende;
		$print_hardware->( A => $a_hardware, $a_hardware_name, $a_hardware_ip );
		print $Db::pr_fh "B-Ende        : #$b_ende:" . mpersinfo($b_ende) . "\n" if $b_ende;
		$print_hardware->( B => $b_hardware, $b_hardware_name, $b_hardware_ip );
		print $Db::pr_fh "Backup-Account: #$backup:" . mpersinfo($backup) . "\n" if $backup;
		print $Db::pr_fh 'Beginn        : ' . isotime($beginn) . "\n" if $beginn;
		print $Db::pr_fh 'Ende          : ' . isotime($ende) . "\n"   if $ende;
	  }
	  <<_
	SELECT    leitung.kunde,
	          leitung.name,
	          leitung.art,
	          leitung.carrier,
	          leitung.name_carrier,
	          leitung.name_kunde,
	          leitung.a_ende,
	          leitung.a_hardware,
		  ha.name, ha.ip,
	          leitung.b_ende,
	          leitung.b_hardware,
		  hb.name, hb.ip,
	          leitung.backup,
	          leitung.beginn,
	          leitung.ende,
	          leitung.timestamp
	FROM      leitung
	LEFT JOIN hardware ha ON leitung.a_hardware = ha.id
	LEFT JOIN hardware hb ON leitung.b_hardware = hb.id
	WHERE     leitung.id = $idi
_
	  or return problem "Leitung #$idi nicht gefunden.";
	DoSelect {
		my($id, $wartungsvertrag, $beginn, $ende) = @_;
		print $Db::pr_fh "WartungsV: #$id $wartungsvertrag ".timerange($beginn,$ende)."\n";
	} <<_
	SELECT   wartungsvertrag_leitung.id,
	         wartungsvertrag.name,
	         wartungsvertrag_leitung.beginn,
	         wartungsvertrag_leitung.ende
	FROM     wartungsvertrag_leitung, wartungsvertrag
	WHERE    wartungsvertrag_leitung.leitung         = $idi
	     AND wartungsvertrag_leitung.wartungsvertrag = wartungsvertrag.id${\( $flags & 1 ? '' : "
	     AND ( wartungsvertrag_leitung.ende IS NULL                  OR
	           wartungsvertrag_leitung.ende >= UNIX_TIMESTAMP(NOW()) )" )}
	ORDER BY wartungsvertrag_leitung.beginn
_
}

1;
