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

use Fehler qw(report_fehler);
use Loader qw(line_in list_buchungen add_buchung delete_buchungen
	edit_buchung valid_arechnung valid_buchung log_view);

# Flag: 1: Return mit einer Buchung
#       4: '-' wird akzeptiert

sub edit_buchungen($;$$) {
	my($rech,$flag,$kn) = @_;

	return unless valid_arechnung($rech);

	my $act = "";
	# $act = "run";

	rech: while(1) {
		if(defined $act and $act eq "run") {
			$act = "l";
		} else {
			$act = line_in "$kn Buchung >",($flag&1)?0:4; last if $act eq "";
		}
		if($act eq "?") {
			print <<'END';
l    auflisten (S: Status)
a    hinzufügen
del  alle löschen
END
			print <<'END' if $flag & 4;
-    keine Buchung
END
			if($flag & 1) {
				print <<'END';
###  Buchungszeile aufrufen
?### Buchungszeile editieren

END
			} else {
				print <<'END';
###  Buchungszeile editieren

END
			}
			next;
		}
		if($act eq "-") {
			return $act if $flag & 4;
			print "???\n";
			next;
		}
		if($act eq "l") { list_buchungen($rech,$kn); next; }
		if($act eq "H") { log_view($kn,"buchung"); next; }
		if($act eq "a") {
			$act = add_buchung($rech,$kn);
			return $act if $flag & 1 and $act;
			next;
		}
		if($act eq "del") {
			delete_buchungen($rech,$kn);
			return undef;
		}
		my $force = ($act =~ s/^\?//) && $flag&1;
		if($act =~ /^\d+$/) { 
			next unless valid_buchung($rech,$act, not $force);
			return $act if $flag & 1 and not $force;
			edit_buchung($rech,$act,$kn);
			next;
		}
		print "Aktion '$act' unbekannt.\n";
		next; fehler: report_fehler(4);
	}
	undef;
}

1;
