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

use Loader qw(line_in log_view line_printer add_deskr strip_kn
	warn_arbeit edit_deskr);
use Fehler qw(report_fehler problem);
use Dbase::Globals qw(clist_descr find_descr get_descr list_descr);
use Dbase::Help qw(Do DoFn);

sub edit_deskrip($;$$) {
	my($desc,$flag,$kn) = @_;
	my $dname = DoFn "select name from descr_typ where id=$desc";
	my $knn = strip_kn($kn)."Descr_$dname";
	my $work = warn_arbeit("descr",$dname,"*",$kn);

	while(1) {
		my $act = line_in "$knn >",4; last if $act eq "";
		if($act eq "?") {
			print <<'END';
l       auflisten
L       auflisten (ASCII)
ll      Auflisten der Bedeutungen der Gruppennamen (in der 3. Spalte)
END
			print <<'END' if $flag & 2;
a       neuen Wert anlegen
del     ganze Tabelle löschen
END
			print <<'END' if $flag & 1;
C       Wert (für Zeichen C) auswählen
NR      Wert (für Nummer NR) auswählen
NAME    Wert (mit Bedeutung NAME) auswählen
?C,...  Wert (... dito) editieren
!       neuen Wert anlegen
END
			print <<'END' unless $flag & 1;
C       Wert (für Zeichen C) editieren
NR      Wert (für Nummer NR) editieren
NAME    Wert (mit Bedeutung NAME) editieren
END
			next;
		}
		if($act eq "l") { line_printer(0); print $Db::pr_fh(list_descr($dname,1)); next; }
		if($act eq "ll") { line_printer(0); print $Db::pr_fh(list_descr($dname."_ident",1)); next; }
		if($act eq "L") { line_printer(0); print $Db::pr_fh(clist_descr($dname,1)); next; }
		if($act eq "H") { log_view($kn,"descr"); next; }

		if($act eq "del") {
			Do("delete from descr where typ = $desc");
			Do("delete from descr_typ where id = $desc");
			return undef;
		}
		if($act eq "a" or $act eq "!") {
			my $ds = add_deskr($desc,$kn);
			return $ds if defined $ds and $flag & 1;
			next;
		}

        my $force = ($act =~ s/^\?//);
		my $ds;
		$ds = find_descr($dname,$act);
		$ds = get_descr($dname,$act) if (not defined $ds or $ds eq "") and $act =~ /^\d+$/;
		if( defined $ds && $ds =~ /^\d+$/ ) {
			$ds = edit_deskr($desc,$ds,$kn) if $force or not $flag & 1;
			return $ds if defined $ds and $flag & 1;
			next;
		}
		print "...nicht gefunden\n";
		next; fehler: report_fehler(4);
	}
	($flag & 1) ? undef : $desc;
}

1;
