use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_in line_printer strip_kn warn_arbeit log_view
		edit_template log_update);
use Fehler qw(report_fehler problem);
use Dbase::Help qw(DoSelect DoFn Do qquote);
use Dbase::Globals qw(content);

# Flags:
# 1 ID zurückliefern, nicht aufrufen
# 2 Hauptmenue-Features auch wenn flag&1
# 4 "-" akzeptiert

sub edit_templates($;$$) {
	my($typ,$kn,$flag) = @_;
	$flag=0 unless defined $flag;
	$kn = strip_kn($kn)."Mustertext_$typ"
		unless $kn =~ s/^!//;
	my $work = warn_arbeit("template",$typ,"*",$kn);

	while(1) {
		content ( my $id = line_in "$kn >",4 )
			or return undef;
		if($id eq '?') {
			print <<END;
l    IDs und Namen auflisten
END
			print <<END if $flag&1;
##   Mustertext mit dieser ID verwenden
NAME Mustertext mit diesem Namen verwenden
END
			print <<END if $flag&4;
-    keinen Mustertext verwenden
END
			print <<END if $flag&1 and $flag&2;
!##   Mustertext mit dieser ID editieren
!NAME Mustertext mit diesem Namen editieren
END
			print <<END unless $flag&1;
##   Mustertext mit dieser ID editieren
NAME Mustertext mit diesem Namen anlegen / editieren
END
			next;
		}
		if($id eq "H") { log_view($kn,"template"); next; }
		if($id eq "-") { return "-" if $flag&4; next; }
		if($id eq "l") { 
			my $hdr;
			line_printer;

			DoSelect {
				my($q,$qn,$data) = @_;

				print $Db::pr_fh <<END unless $hdr++;
 ID Name             Länge
END

				printf $Db::pr_fh "%3d %-15.15s %6d Bytes\n",$q,$qn,$data;
			} "select id,name,length(inhalt) from $typ order by id"
				or print "(leer)\n";
			next;
		}
		if($flag&1 and $id !~ s/^!//) {
			$id = DoFn("select name from $typ where id=$id")
				if $id =~ /^\d+$/;

			$id = DoFn("select id from $typ where name=${\qquote $id}")
				if defined $id;

			return $id if $id;
			print STDERR "... nicht gefunden.\n";
			next;
		}
		if($id =~ /^\d+$/) {
			$id = DoFn("select name from $typ where id=$id");
			unless($id) {
				print STDERR "... nicht gefunden.\n";
				next;
			}
		}
		edit_template($typ,$id,$kn);
		next; fehler: report_fehler(4);
	}
}
1;
