use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_in list_dienste log_view add_dienst edit_dienst
	valid_dienst list_umrechnungen);
use Fehler qw(report_fehler);
use Dbase::Help qw(DoFn quote);

# Flag: 1: Return nach Status
#       2: Hauptmenu-Features
#       4: '-' akzeptieren
#       8: '*' akzeptieren

sub edit_dienste (;$$$) {
	my ($flag,$kn,$helptext) = @_;
	while(1) {
		my $act = line_in "$kn Dienst >",($flag&1)?0:4; return undef if $act eq "";
		if($act eq "?") {
			print <<'END';
l      auflisten
END
			print <<'END' if $flag & 2;
L      Umrechnungen auflisten
a      hinzufügen
END
			print <<'END' if $flag & 1;
?NAME  Dienst editieren
NAME   Dienst aufrufen
END
			print <<'END' unless $flag & 1;
NAME   Dienst editieren
END
			print $helptext if defined $helptext;
			print "\n";
			next;
		}
		if($act eq "l") { list_dienste($kn); next; }
		if($act eq "L") { list_umrechnungen($kn); next; }
		if($act eq "H") { log_view($kn,"dienst"); next; }
		if($act eq "*") {
			return $act if $flag & 8;
			print "???\n";
			next;
		}
		if($act eq "-") {
			return $act if $flag & 4;
			print "???\n";
			next;
		}
		if($act eq "a" and $flag & 2) { 
			my $ret = add_dienst($kn);
			return $ret if $flag & 1 and $ret > 0;
			next;
		}
		my $force = ($act =~s/^\?//);
		if($act =~ /^\S+$/) { 
			my $q;
			if($act =~ /^\d+$/) {
				$q = $act;
			} else {
				$q = DoFn("select id from dienst where name = '${\quote $act}'");
			}
			if(defined $q) {
				next unless defined valid_dienst($q,1);
				return $q if $flag & 1 and not $force;
				edit_dienst($q,$kn);
				next;
			}
		}
		print "Aktion '$act' kenne ich nicht.\n";
		next; fehler: report_fehler(4);
	}
	undef;
}
1;
