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

use Loader qw(
	acct_kunde acct_list
	edit_alle_stunden
	edit_confitems
	edit_domains
	edit_hardwares
	edit_hostgroups
	edit_ipaddrs
	edit_kunde
	edit_leitungen
	edit_mailrules
	edit_rechsteps
	edit_tarifaccts edit_tarifnamen edit_tickets
	export_acct_kunden export_kunden
	line_in
	line_printer
	list_personen list_xtarife list_vrfss list_rechsteps_kunden
	list_messverbrauchers
	log_view
	pruefe_kunden
	strip_kn
	valid_kunden
	warn_arbeit
  );
use Fehler qw(report_fehler);
use Dbase::Globals qw(get_kunde);
use Term::ANSIColor qw(GREEN RESET);

sub edit_alle_kunden (;$) {
	my($kn) = @_;

	my $okn = $kn;
	$kn = strip_kn($kn)."Kunde_0:alle";
	my $work = warn_arbeit("kunde","-","*",$kn);

	kunde: while(1) {
		my $act = line_in "$kn >",4; print "\n",last if $act eq "";
		if($act eq "?") {
			print <<'END';
d   Domains                     i    IP-Nummern/Netze   v  VRFs
h   Hardware                    M    Regeln für E-Mail
hg  Hostgroups                  lt   Leitungen
si  Sicherungen auflisten
t   Tarifliste                  a/aa Accountingliste
W   Stundenliste                ml   Personenliste
T   Tickets pflegen             R    Liste der Rechnungsdurchläufe
=*  Rechnung gen.               =    Test (nächste R.)      ==  vergleichen
tt  Tarifaccounting ("wie berechnen wir das")
ds  Dienste/Schritte auf der Rechnung ("was wird wie gedruckt")
dk  Kunden mit spezifischen Diensten/Schritten auflisten

X  exportiere Stammdaten  XT ... auf Testmandant   XB#  buchen   XBT  testbuchen
END
			next;
		}
		if($act eq "tt") { edit_tarifaccts(0,$kn); next; }
		if($act eq "TT") { edit_tarifnamen(0,$kn); next; }
		if($act eq "ds") { edit_rechsteps(2,$kn); next; }
		if($act eq "dk") { list_rechsteps_kunden(); next; }
		if($act eq "t") { list_xtarife(); next; }
		if($act eq "=*") { acct_kunde(0, $kn, 1); next; }
		if($act eq "=") { acct_kunde(0, $kn, 0); next; }
		if($act eq "==") { acct_kunde(0, $kn, 16); next; }
		if($act eq "=+") { acct_kunde(0, $kn, 256); next; }
		if($act eq "i") { edit_ipaddrs(undef,0,$kn); next; }
		if($act eq 'ci') { edit_confitems(undef,$kn); next; }
		if($act eq 'd') { edit_domains(undef,0,$kn); next; }
		if($act eq "v") { list_vrfss(); next; }
		if($act eq 'h') { edit_hardwares(undef,$kn); next; }
		if($act eq "H") { log_view($kn,"kunde",0); next; }
		if($act eq "W") { edit_alle_stunden($kn); next; }
		if($act eq "T") { edit_tickets(0,2,$kn); next; }
		if($act eq "X") { export_kunden(); next; }
		if($act eq "XT") { export_kunden(2); next; }
		if($act =~ s/^XB(\d*)$//) { export_acct_kunden(8,$kn,$1); next; }
		if($act =~ s/^XBT(\d*)$//) { export_acct_kunden(2|8,$kn,$1); next; }
		if($act eq "a") { acct_list(0, $kn); next; }
		if($act eq "aa") { acct_list(0, $kn, 1); next; }
		if($act eq "m") { print GREEN, <<_; next; }
Mit "n?..." etc. kann bei jedem Kunden global nach Personen gesucht werden.
Hier ist das leider nicht vorgesehen. Ansonsten empfehlen wir dafür kundebunt.${\RESET}
_
		if($act eq 'M') { edit_mailrules(0, $kn); next; }
		if($act eq "%") { pruefe_kunden(); next; }
		if($act eq "%%") { pruefe_kunden(1); next; }
		if($act eq "ml") { list_personen(-1, $kn); next; }
		if ( $act eq 'hg' ) { edit_hostgroups( undef, 0, $kn ); next; }
		if ( $act eq 'lt' ) { edit_leitungen( undef, $kn ); next; }
		if ( $act eq 'si' ) { list_messverbrauchers(); next; }
		if($act eq "!") { valid_kunden(4,$kn); next; }
		if($act eq "!!") { valid_kunden(2|4,$kn); next; }
		if($act eq "R") {
			my $hdr;
			line_printer;
			DoSelect {
				my($id,$anfang,$ende,$template) = @_;
				print $Db::pr_fh <<END unless $hdr++;
 ID von      bis      Zusatztext
END
				if(defined $template) {
					$template = DoFn("select name from rech_fuss where id=$template");
				} else {
					$template = "-";
				}
				printf $Db::pr_fh "%3d %8d %8d %s\n",
					$id,$anfang,$ende,$template;

			} "select id,anfang,ende,template from rechlauf order by id"
				or print "(keine Einträge)\n";
			next;
		}

		my $id = get_kunde $act;
		if($id) { edit_kunde($id,$okn); next; }

		print "Aktion '$act' kenne ich nicht. Liste mit '?'.\n";
		next; fehler: report_fehler(4);
	}
	undef;
}

1;
