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

use Loader qw(line_in valid_kunde add_ipregion list_ipregions log_view
	edit_ipregion valid_ipregion);
use Fehler qw(report_fehler problem);
use Dbase::Globals qw(get_ipkunde name_kunde);
use Dbase::Help qw(DoFn qquote);

# Flags: 1: Return mit Eintrag
#        4: '-' erlaubt
sub edit_ipregions($;$$) {
	my($id,$flag,$kn) = @_;

	return unless valid_kunde($id,1);

	$kn = "Kunde $id:" .name_kunde($id) if $kn eq "";

	my $act;
	# $act = "run";
	aloop: while(1) {
		if(defined $act and $act eq "run") {
			$act = "l";
		} else {
			$act = line_in "$kn Zone >",($flag&1)?0:4; return undef if $act eq "";
		}
		if($act eq "?") {
			print <<'END';
l     auflisten    ll (ausführlich)
a     hinzufügen
END
			print <<'END' if $flag & 4;
-     disassoziieren
END
			if($flag&1) {
				print <<'END';
###   auswählen
?###  editieren
END
			} else {
				print <<'END';
###   editieren
END
			}
			next;
		}

		if($act eq "a") {
			my $ret = add_ipregion($id,$kn);
			return $ret if $flag & 1 and $ret > 0;
			next;
		}
		if($act eq "l") { list_ipregions($id,$kn,0); next; }
		if($act eq "ll") { list_ipregions($id,$kn,2); next; }
		if($act eq "H") { log_view($kn,"ipregion"); next; }
		return $act if $act eq "-" and $flag & 4;

		my $force = ($act =~ s/^\?//) && $flag&1;
		{
			my $sact = DoFn("select id from ipregion where zone=${\qquote $act}");
			$act = $sact if $sact;
		}
		if($act =~ /^[\d.\/]+$/) { 
			if($act =~ /[\.\/]/) {
				my $ipa = get_ipkunde($2);
				if($ipa eq "") {
					problem "IP-Adresse '$act' nicht gefunden.\n";
					next;
				}
				$ipa = DoFn("select ipregion from ipkunde where id = $ipa");
				if(not $ipa) {
					problem "IP-Adresse '$act' hat keine Region.\n";
					next;
				}
				$act = $ipa;
			} else {
				next unless valid_ipregion($act, not $force);
			}
			return $act if $flag&1 and not $force;
			edit_ipregion($act,$id,$kn);
			next;
		}
		print "Aktion '$act' kenne ich nicht. Liste mit '?'.\n";
		next; fehler: report_fehler(4);
	}
	undef;
}

1;
