use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_in line_printer log_view edit_tarifklasse
	add_tarifname list_tarife_kurz edit_tarif list_tarife);
use Fehler qw(report_fehler);
use Dbase::Help qw(DoSelect DoFn qquote);
use Dbase::Globals qw(content);

# Flag: 1: Return (der Tarifname-ID) nach Tarif
#       2: Hauptmenu-Features
#       4: '-' akzeptieren
#       8: Tarifklassen-ID, nicht -Name-, zurückliefern
#      16: Mit <Return> Standardwert akzeptieren

sub edit_tarifnamen (;$$$$) {
	my ($flag,$kn,$name,$kunde) = @_;
	$flag=0 unless defined $flag;
	my $prompt = "";
	if(defined $name and $flag&16) {
		$prompt = "[$name]";
	}
	my $ksel;
	if($kunde) {
		$prompt = "$kn spez.Tarifdefs $prompt>";
		$ksel = "kunde=$kunde";
	} else {
		$prompt = "$kn TarifDefs $prompt>";
		$ksel = "kunde is null";
	}
	tarife: while(1) {
		my $act = line_in "$prompt",($flag&1)?0:4;
		return undef if not defined $act;
		if(defined $name and $act eq "") {
			$act=$name;
			$name=undef;
		} elsif(not content $act) {
			return undef;
		}

		if($act eq "?") {
			my $mo = $kunde?"ohne":"mit";
			print <<'END' if $kunde;
ll    Namen auflisten                   l        ... aber nur aktuelle
la    Altlast-Tarifnamen                lu       ungenutzte Tarifnamen
lz    Tarife ohne Laufzeit              ...*     auch $mo Kunden
END
			print <<'END' unless $kunde;
ll    Namen auflisten                   l        ... aber nur aktuelle
LL    Tarife auflisten                  ll       ... aber nur aktuelle
la    Altlast-Tarifnamen                lu       ungenutzte Tarifnamen
lz    Tarife ohne Laufzeit              ...*     auch $mo Kunden
END
			print <<'END' if $flag & 2;
a     hinzufügen
END
			print <<'END' if $flag & 4;
-     Tarif disassoziieren
END
			print <<'END' if $flag & (4|16) == 16;
-     abbrechen
END
			print "\n";
			print <<'END' if $flag & 1;
?###  Tarifnamen editieren
END
			print <<'END';
###   Tarifnamen aufrufen
T###  Tarif direkt aufrufen
END
			next;
		}
		if($act =~ /^T(\d+)$/) { edit_tarif($1,$kn); next; }
		if($act eq "H") { log_view($kn,"tarif"); next; }
		if($act eq "l") { list_tarife_kurz($kunde||0,$kn,16); next; }
		if($act eq "l*") { list_tarife_kurz(undef,$kn,16); next; }
		if($act eq "ll") { list_tarife_kurz($kunde||0,$kn,0); next; }
		if($act eq "ll*") { list_tarife_kurz(undef,$kn,0); next; }
		if($act eq "la") { list_tarife_kurz($kunde||0,$kn,32); next; }
		if($act eq "la*") { list_tarife_kurz(undef,$kn,32); next; }
		if($act eq "lz") { list_tarife_kurz($kunde||0,$kn,4|1); next; }
		if($act eq "lz*") { list_tarife_kurz(undef,$kn,4|1); next; }
		if($act eq "lu") { list_tarife_kurz($kunde||0,$kn,2); next; }
		if($act eq "lu*") { list_tarife_kurz(undef,$kn,2); next; }
		if($act eq "L") { list_tarife(undef,$kn,16); next; }
		if($act eq "LL") { list_tarife(undef,$kn,0); next; }

		if($act eq "-") {
			return $act if $flag & 4;
			return undef if $flag & 16;
			print "???\n";
			next;
		}
		if($act eq "a" and $flag & 2) { 
			my $ret = add_tarifname($kunde,$kn);
			return $ret if $flag & 1 and $ret > 0;
			next;
		}

		my $flg = ($act =~ s/^(\!)//);
		my ($tnid,$tkid);
		if($act =~ /^\d+$/) {
			($tkid,$tnid) = DoFn("select tarifklasse.id,tarifname.id from tarifname,tarifklasse where tarifklasse.id = $act and tarifklasse.tarifname=tarifname.id");
		} else {
			($tkid,$tnid) = DoFn("select tarifklasse.id,tarifname.id from tarifname,tarifklasse where tarifname.name = ${\qquote $act} and tarifklasse.tarifname=tarifname.id and $ksel");
		}
		if($tkid) {
			return (($flag&8) ? $tkid : $tnid) if $flag&1 and not $flg;
			edit_tarifklasse($tkid,2,$kn,$kunde);
			next;
		}

		print "'$act' kenne ich nicht.\n";
		next; fehler: report_fehler(4);
	}
	return undef;
}
1;
