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

use Loader qw(
	delete_handles
	edit_handle
	line_in line_printer list_handles log_view
	valid_person
  );
use Fehler qw(report_fehler problem);
use Dbase::Globals qw(find_descr list_descr);
use Dbase::Help qw(DoFn);

# Flag: 1: Return nach Status
#       4: '-' akzeptieren

sub edit_handles ($;$$) {
	my ($pers,$flag,$kn) = @_;

	valid_person($pers,1);

	while(1) {
		my $act = line_in "$kn Handle >",($flag&1)?0:4; return undef if $act eq "";
		if($act eq "?") {
			print <<'END';
l      auflisten
ll     alle bekannten NICs auflisten
END
			print <<'END' if $flag & 1;
?NIC   Eintrag editieren / neu anlegen
NIC    Eintrag aufrufen
END
			print <<'END' unless $flag & 1;
NIC    Eintrag editieren / neu anlegen
del    alle Einträge löschen
END
			print "\n";
			next;
		}
		if($act eq "l") { list_handles($pers,$kn); next; }
		if($act eq "ll") {
			no warnings 'once';
			line_printer(0);
			print $Db::pr_fh(list_descr("nic",1));
			next;
		}
		if($act eq "H") { log_view($kn,"nic"); next; }
		if($act eq "-") {
			return $act if $flag & 4;
			print "???\n";
			next;
		}
		if($act eq "del") {
			if($flag & 1) {
				print "???\n";
			} else {
				delete_handles($pers,$kn);
			}
			next;
		}
		my $force = ($act =~s/^\?//);
		if($act =~ /^\S+$/) { 
			my $nic = find_descr("nic",$act);
			if(defined $nic) {
				if(DoFn("select count(*) from nic where person=$pers and nic=$nic and handle != ''")) {
					return ($pers,$nic) if $flag & 1 and not $force;
				}
				unless($flag & 1 and not $force) {
					edit_handle($pers,$nic,$kn);
					next;
				}
				problem "Person #$pers hat keinen Handle für '".find_descr("nic",$nic)."'.\n";
				next;
			}
		}
		print "Aktion '$act' kenne ich nicht.\n";
		next; fehler: report_fehler(4);
	}
	undef;
}

1;
