use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_in list_rechsteps log_view add_rechstep
	edit_rechstep valid_rechstep);
use Fehler qw(report_fehler problem);
use Dbase::Help qw(DoFn quote);
use Dbase::Globals qw(find_dienst);

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

sub edit_rechsteps (;$$$) {
	my ($flag,$kn,$kid) = @_;
	$flag=0 unless defined $flag;
	my $kstep;
	if($kid) {
		$kstep = "kunde = $kid"
	} else {
		$kstep = "kunde is NULL"
	}

	while(1) {
		my $act = line_in "$kn Schritt >",($flag&1)?0:4; return undef if $act eq "";
		if($act eq "?") {
			print <<'END';
l      auflisten
END
			print <<'END' if $flag & 2;
a      hinzufügen
END
			print <<'END' if $flag & 1;
?NAME  Schritt editieren
NAME   Schritt aufrufen
END
			print <<'END' unless $flag & 1;
NAME   Schritt editieren
END
			print "\n";
			next;
		}
		if($act eq "l") { list_rechsteps($kn,$kid); next; }
		if($act eq "H") { log_view($kn,"rechstep"); next; }
		if($act eq "-") {
			return $act if $flag & 4;
			print "???\n";
			next;
		}
		if($act eq "a" and $flag & 2) { 
			my $ret = add_rechstep($kn,$kid);
			return $ret if $flag & 1 and $ret > 0;
			next;
		}
		my $force = ($act =~s/^\?//);
		if($act =~ /^\S+$/) { 
			my $id;
			if($act =~ /^\d+$/) {
				my $cs = DoFn("select count(*) from rechstep where step=$act and $kstep");
				if($cs == 0) {
					problem "Diesen Schritt gibt es hier nicht.";
					next;
				} elsif($cs > 1) {
					problem "Es gibt $cs Schritte mit dieser Nummer.","Verwende den Dienst zum Auswählen.";
					next;
				}
				$id = DoFn("select id from rechstep where step=$act and $kstep");
			} else {
				$id = find_dienst $act;
				$id = DoFn("select id from rechstep where dienst=$id and $kstep") if defined $id;
				unless(defined $id) {
					problem "Einen Schritt mit Dienst $act gibt es hier nicht.";
					next;
				}
			}
			next unless valid_rechstep($id,1);
			return $id if $flag & 1 and not $force;
			edit_rechstep($id,$kn);
			next;
		}
		print "Aktion '$act' kenne ich nicht.\n";
		next; fehler: report_fehler(4);
	}
	undef;
}
1;
