use utf8;
use warnings; no warnings "redefine";
use strict;

use Dbase::Help qw(DoFn);
use Loader qw(line_in valid_kunde list_tickets_kurz
	edit_ticket valid_ticket log_view);
use Fehler qw(report_fehler problem fehler warnung);

# Flag: 1: Return nach Ticket
#       2: Hauptmenu-Features
#       4: '-' akzeptieren
#       8: OTRS-Tickets akzeptieren

use constant ACT2STATUS => {
	l  => [qw( open stalled          )],
	L  => [qw(              resolved )],
	LL => [qw( open stalled resolved )],
};

sub edit_tickets ($;$$) {
	my ($id,$flag,$kn) = @_;
	return unless ($flag&1 and not $id) or valid_kunde($id,1);
	my $act;

	tickets: while(1) {
		$act = line_in "$kn Ticket> ",($flag&1)?0:4; return undef if $act eq "";
		if($act eq "?") {
			print <<'END';
l     Liste aller aktuellen (=open/stalled) Tickets
L     Liste aller abgeschlossenen (=resolved) Tickets
LL    Liste aller Tickets
END
			print <<'END' if $flag & 2 and $id;
a     hinzufügen
END
			print "\n";
			print <<'END' if $flag & 1;
?###  Ticket editieren
END
			print <<'END';
###   Ticket aufrufen
END
			next;
		}
		if($act eq "H") { log_view($kn,"ticket"); next; }
		if ( defined( my $status_list = ACT2STATUS->{$act} ) ) {
			list_tickets_kurz( $id || 1, $kn, $status_list );
			next;
		}
		if ( $act eq 'll' ) { problem(<<_); next; }
Diese Funktion wurde im Rahmen von Ticket #10039159 abgeschafft.
Falls das für Dich ein Problem ist, beschwer Dich bitte dort!
_
		if($act eq "-") {
			return $act if $flag & 4;
			print "???\n";
			next;
		}
		if($act eq "a" and $flag & 2) { 
			warnung "Das geht nur über das RT.";
			next;
		}
		my $force = ($act =~ s/^\?//) && $flag&1;
		if($act =~ /^\d+$/) { 
			next unless valid_ticket($act,($force?0:1));
			# TODO: entfernen, wenn RT aus
			my $t = DoFn("select ticket from ticket where id = $act");
			unless($t) {
				return $act if $flag&1 and not $force;
				warnung "OTRS-Tickets sind hier nicht editierbar.";
				next;
			}
			return $t if $flag & 1 and not $force;
			edit_ticket($act,$id,$kn);
			next;
		}
		# $act =~ s/^\?//; # Grr
		#
		print "Aktion '$act' kenne ich nicht.\n";
		next; fehler: report_fehler(4);
	}
	undef;
}

1;
