use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_printer);
use Dbase::Help qw(DoSelect DoFn);
use Dbase::Globals qw(def_or_minus);
use Dbase::IP;

sub list_ipregions($;$$) {
	my($id,$kn,$flag) = @_;
	line_printer;

	my $hdr;
	my $res = DoSelect {
		my($idi,$name,$info,$alloc,$ipkunde,$ipkbits) = @_;
		$info = "" unless defined $info;
	
		$name = "" unless defined $name;
		print $Db::pr_fh <<END unless $hdr++;
   ID Name                  a/m  Info
END
		my $sta = "-  ";
		my $res = "";
		if($flag & 2) {
			if($ipkunde) {
				if($alloc > 32)  {
					$alloc = 128-$alloc;
				} else {
					$alloc = 32-$alloc;
				}
				$sta = sprintf "  /%d",$alloc;
				my($adr,$bits,$nam)=DoFn("select ip6,bits,name from ipkunde where id = $ipkunde");
				$adr = Dbase::IP->new_db($adr,$bits);
				$res .= sprintf "       #%5d %20s %s\n",$ipkunde,$adr->str(4),def_or_minus($nam);
			}
			DoSelect {
				my($iid,$adr,$bit,$nam)=@_;
				$adr = Dbase::IP->new_db($adr,$bit);
				$res .= sprintf "       -%5d %20s %s\n",$iid,$adr->str(4),def_or_minus($nam);
			} "select id,ip6,bits,name from ipkunde where ipkunde.ipregion = $idi and ( ende is NULL or ende > UNIX_TIMESTAMP(NOW()) ) ";
		} else {
			$sta = sprintf "%d/%d",$ipkbits,$alloc if $ipkunde;
		}
			goto out unless 
		printf $Db::pr_fh "%5d %-20s %5s %s\n%s", $idi, $name,$sta,$info,$res;
	} "select ipregion.id,ipregion.zone,ipregion.infotext,ipregion.alloc,ipkunde.id,ipkunde.bits from ipregion left join ipkunde on ipkunde.id = ipregion.ipkunde where ipregion.kunde = $id order by ipregion.zone"
		or print "(leer)\n";
out:
	$res;
}
1;
