use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(DoSelect);
use Dbase::IP;
use Dbase::Globals qw(
  get_descr
  kpersinfo
  nice_intervall
  time4ticket
);
use Fehler qw(problem);
use Loader qw(ticket_get_text);
use noris::Ticket::API;

use constant TICKET_ATTR => qw(
  due
  kunde
  owner
  status
  title
);
use constant TICKET_ATTR_LONG => qw(
  created
  est_effort
  info
  pending_until
  priority
  queue
  type
);

# Bevor es eine Ticket-API gab, hat diese Funktion offenbar diverse
# Flags (in $short) unterstützt, die allerdings undokumentiert waren.
# Aktuell werden diese Flags nun teilweise einfach ignoriert (z. B. 4).
# Generell ist diese Funktion ziemlich sicher überarbeitungsbedürftig,
# es ist nur fraglich, ob sich das lohnt.
sub ticket_get_header($;$$);
sub ticket_get_header($;$$) { # 1: one line
	my($id,$short,$subnr) = @_;
	my $timestamp = my $d_told = my $d_acted = my $ntick =
	  '(Wird von der Ticket-API derzeit nicht unterstützt.)';

	my @ticket_attr = TICKET_ATTR;
	push @ticket_attr, TICKET_ATTR_LONG unless $short & 1;

	my $conn = noris::Ticket::API::get_pooled_connection();
	my %ticket;
	@ticket{@ticket_attr} = $conn->get_ticket( $id, \@ticket_attr )
	  or return problem("Ticket #$id nicht gefunden.");

	my $ret;
	if($short & 1) {
		$ret .= "#$id";
		$ret .= "-$subnr" if $subnr;
		$ret .= " $ticket{status}";
		$ret .= " ($ticket{kunde})" if defined $ticket{kunde} && not $short & 32768;
		$ret .= qq( "$ticket{title}") if defined $ticket{title};
		$ret .= " $ticket{owner}" if defined $ticket{owner};
		$ret .= ": " unless $short & 32768;
	} else {
		$ret .= "### Ticket #$id";
		$ret .= "-$subnr" if $subnr;
		$ret .= " ($ticket{kunde})" if defined $ticket{kunde};
		$ret .= "\n";
		$ret .= "Timestamp  : $timestamp\n";
		$ret .= "Problem    : $ticket{title}\n" if $ticket{title} ne "";
		$ret .= "Priorität  : $ticket{priority}\n" if $ticket{priority};
		$ret .= "Bearbeiter : $ticket{owner}\n" if defined $ticket{owner};
		$ret .= "Wiedervorl.: $ticket{pending_until}\n" if defined $ticket{pending_until};
		$ret .= "Start      : ";
	}
	$ret .= $ticket{created} unless $short & 1;
	if ( defined $ticket{due} ) {
		$ret .= "\nTermin     : " unless $short & 1;
		$ret .= $ticket{due} unless $short&32768;
	}
	$ret .= "\n";
	unless($short & 1) {
		$ret .= "Status     : $ticket{status}\n";
		$ret .= "Statustext : $ticket{info}\n" if defined $ticket{info};
		$ret .= "d_told     : $d_told\n" if defined $d_told;
		$ret .= "d_acted    : $d_acted\n" if defined $d_acted;
		$ret .= 'Planzeit   : ' . nice_intervall( $ticket{est_effort} * 3600 ) . "\n"
		  if defined $ticket{est_effort};
		if ( my $szeit = time4ticket($id) ) {
			$ret .= 'Ist-Zeit   : ' . nice_intervall($szeit) . "\n";
		}
		$ret .= "Queue      : $ticket{queue}\n";
		$ret .= "Bereich/Typ: $ticket{type}\n" if defined $ticket{type};
		DoSelect {
			my($id,$name) = @_;
			$ret .= "K-Domain   : #$id:$name\n";
		} "select id,domain from domainkunde where ticket = $id";
		DoSelect {
			my($id,$addr,$bits) = @_;
			$addr = Dbase::IP->new_db($addr,$bits);
			$ret .= "K-IP       : #$id:$addr\n";
		} "select id, ip6,bits from ipkunde where ticket = $id";
		DoSelect {
			my($pers,$nic) = @_;
			$ret .= "K-Handle   : #$pers/$nic:".kpersinfo($pers)."/".get_descr("nic",$nic)."\n";
		} "select person,nic from nic where ticket = $id";

		if($ntick) {
			if ( $ntick =~ /^\d+\z/ ) {
				foreach my $mm(1..$ntick) {
					$ret .= sprintf "Text  %3d  :%s\n",$mm, scalar ticket_get_text($id,$mm,32);
				}
			}
			else { $ret .= "Text       : $ntick\n" }
		} else {
			$ret .= "Texte      : Keine.\n";
		}
	}
	$ret;
}

1;
