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

use Fehler qw(report_fehler problem);
use Loader qw(
  delete_person
  edit_assocs edit_handles edit_person_acls edit_person_stunden
  line_in
  list_person
  list_person_domains
  list_person_flags
  list_person_hardware
  list_person_postfach
  list_person_webspace
  log_view
  print_adresse
  pruefe_person
  set_adresse_kurz
  set_nagiosconf
  set_person_abteilung
  set_person_adresse
  set_person_assocdomain
  set_person_ausweis
  set_person_beschreibung
  set_person_email
  set_person_fax
  set_person_flags
  set_person_funktion
  set_person_gebjahr
  set_person_gebtag
  set_person_homedir
  set_person_ipliste
  set_person_isdn
  set_person_kunde
  set_person_kurzname
  set_person_mailart
  set_person_multilink
  set_person_name
  set_person_pager
  set_person_passwort
  set_person_pppoe
  set_person_radiustemplate
  set_person_redirect
  set_person_remip
  set_person_resellerhandle
  set_person_tarif
  set_person_telefon
  set_person_ueber
  set_person_userid
  set_person_username
  set_person_vrf
  set_person_zusatz
  show_person_pw
  strip_kn
  valid_kunde valid_person
  warn_arbeit warn_kunde
);
use Dbase::Help qw(DoFn DoTransSuspend qquote);

sub edit_person($;$$) {
    my ( $pers, $id, $kn ) = @_;    # person kunde

    return unless valid_person($pers);
    if ($id) {
        return unless valid_kunde( $id, 1 );
    }
    else {
        $id = DoFn("select kunde from person where id = $pers");
    }

    warn_kunde( "person", $pers, $id )
      unless DoFn(
        "select count(*) from kundemail where person = $pers and kunde = $id");

    $kn = strip_kn($kn) . "Person_$pers:";
    my $work = warn_arbeit( "person", $pers, "*", $kn );
    {
        my ( $unam, $pnam ) =
          DoFn("select user,name from person where id = $pers");
        if ( $unam || $pnam ) {
            my $ps = $unam || $pnam;
            $ps =~ s/\s+/_/g;
            $kn .= $ps;
        }
    }

  uedit: while (1) {
        my $act = line_in "$kn >", 4;
        last if $act eq "";
        if ( $act eq '?' ) {
            print <<'END';
l   auflisten                       ll  ausführlicher anzeigen (mit Landkarte)
d   (lange) Beschreibung
n   Name                            m   Mailadresse
n!  Name, dabei Groß-/Kleinschreibung korrigieren
a   Abteilung                       M   zusätzliche Mailadressen (Tickets)
t/p Telefonnummer ('p'hone)         f   Faxnummer          au Ausweis-/Pass-Nr
g   Pager/Handynummer               b   Benachrichtigung wie?
ad  Adresse ändern                  h   NIC-Handles
ak  Kurzname für Adresse setzen     rh  Reseller-Handle (ID) editieren 
i   Zusatzinfo                      k   Kurzname für Suche
F   Funktion                        ac  Queue-ACLs (RT)
T   Tarif (Arbeitszeit)             W   Stundenliste
u   Benutzername (bei uns)          uu  BenutzerID ('?' für neue ID)
uf  Userflags   ufh  Historie       uh  Homedirectory
pi  Peer-IP-Adresse                 ri  zu routende Netzbereiche
rt  Radius-Template auswählen       uk  Multilink          v  VRF
pp  PPPoE-Template auswählen
ud  assoziierte Domains (für HTTP)  r   HTTP-Redirect-Ziel editieren
G   Geburtstag (MM-TT)              GG  Geburtsjahr (JJJJ)
ü   übergeordneten Personeneintrag setzen (Firma bei der er/sie arbeitet)
un  ISDN-Nummern (mit | getrennt, > nur rein, < nur raus)
up  Paßwort generieren              K   primären Kunden ändern
Up  Paßwort eingeben                UP: Wiedervergabe -- VORSICHT!!
N   Nagios-Konfig. (s. RT#442558)
del löscht die Person

d?  Info, bei welchen Domains diese Person als Owner oder *-C eingetragen ist
d!? dito, inkl. beendeter Domains   w # Adresse "#" anzeigen (Nr/Kürzel)
m?  Infos zum Inhalt des Postfachs  w?  Infos zum WebSpace
h?  Liste aktiver Hardware mit dieser Person als Standort
H?  Liste (auch beendeter) Hardware mit dieser Person als Standort
END
            next;
        }
        if ( $act eq "geheim" ) {
            DoTransSuspend { show_person_pw( $pers, $kn ); };
            next;
        }
        if ( $act eq 'n' ) { set_person_name( $pers, $kn ); next; }
        if ( $act eq 'n!') { set_person_name( $pers, $kn, 1 ); next; }
        if ( $act eq 'm' ) { set_person_email( $pers, $kn ); next; }
        if ( $act eq 'M' ) { edit_assocs( $pers, $kn ); next; }
        if ( $act eq 'W' ) { edit_person_stunden( $pers, $kn ); next; }
        if ( $act eq 'ac' ) { edit_person_acls( $pers, $kn ); next; }
        if ( $act eq "H" ) { log_view( $kn, "person", "id", $pers ); next; }
        if ( $act eq 'uk' ) { set_person_multilink( $pers, $kn ); next; }
        if ( $act eq 'v' ) { set_person_vrf $pers, $kn; next; }
        if ( $act eq "K" ) { set_person_kunde( $pers, $kn ); next; }
        if ( $act eq 'a' ) { set_person_abteilung( $pers, $kn ); next; }
        if ( $act eq 'r' )  { set_person_redirect $pers;       next; }
        if ( $act eq 'rt' ) { set_person_radiustemplate $pers; next; }
        if ( $act eq 'pp' ) { set_person_pppoe $pers; next; }

        if ( $act eq 'p' or $act eq 't' ) {
            set_person_telefon( $pers, $kn );
            next;
        }
        if ( $act eq 'f' ) { set_person_fax( $pers, $kn ); next; }
        if ( $act eq 'g' ) { set_person_pager( $pers, $kn ); next; }
        if ( $act eq 'b' ) { set_person_mailart( $pers, $kn ); next; }
        if ( $act eq 'T' ) { set_person_tarif( $pers, $kn ); next; }
        if ( $act eq 'au' ) { set_person_ausweis( $pers, $kn ); next; }
        if ( $act eq 'un' ) { set_person_isdn( $pers, $kn ); next; }
        if ( $act eq 'w' or $act eq 'ad') { set_person_adresse( $pers, $kn ); next; }
        if ( $act eq 'ak') {
			my $adr = DoFn("select adresse from person where id=$pers");
			if($adr) {
				set_adresse_kurz($adr);
			} else {
				problem "Diese Person hat noch keine Adresse.";
			}
			next; }
        if ( $act eq 'd' ) { set_person_beschreibung( $pers, $kn ); next; }
        if ( $act eq 'h' ) { edit_handles( $pers, 0, $kn ); next; }
        if ( $act eq 'i' ) { set_person_zusatz( $pers, $kn ); next; }
        if ( $act eq 'F' ) { set_person_funktion( $pers, $kn ); next; }
        if ( $act eq 'G' ) { set_person_gebtag( $pers, $kn ); next; }
        if ( $act eq 'GG' ) { set_person_gebjahr( $pers, $kn ); next; }
        if ( $act eq '%' ) { pruefe_person($pers); next; }
        if ( $act eq '%%' ) { pruefe_person( $pers, 1 ); next; }
        if ( $act eq 'k' ) { set_person_kurzname( $pers, $kn ); next; }
        if ( $act eq 'u' ) { set_person_username( $pers, $kn ); next; }
        if ( $act eq 'uh' ) { set_person_homedir( $pers, $kn ); next; }
        if ( $act eq 'ud' ) { set_person_assocdomain( $pers, $kn ); next; }
        if ( $act eq 'pi' ) { set_person_remip( $pers, $kn ); next; }
        if ( $act eq 'ht' ) { set_person_bticket( $pers, $kn ); next; }
        if ( $act eq 'ha' ) { set_person_aticket( $pers, $kn ); next; }
        if ( $act eq 'ri' ) { set_person_ipliste( $pers, $kn ); next; }
        if ( $act eq 'up' ) { set_person_passwort( $pers, $kn, 2 ); next; }
        if ( $act eq 'Up' ) { set_person_passwort( $pers, $kn ); next; }
        if ( $act eq 'UP' ) { set_person_passwort( $pers, $kn, 1 ); next; }
        if ( $act eq 'uu' ) { set_person_userid( $pers, $kn ); next; }
        if ( $act eq 'uf' ) { set_person_flags( $pers, $kn ); next; }
        if ( $act eq 'ufh' ) { list_person_flags( $pers, $kn ); next; }

        if ( $act eq 'ue' or $act eq 'ü' ) {
            set_person_ueber( $pers, $kn );
            next;
        }
        if ( $act eq 'rh' ) { set_person_resellerhandle( $pers, $kn ); next; }
        if ( $act eq 'd?' ) { list_person_domains $pers, $kn; next; }
        if ( $act eq 'd?!' || $act eq 'd!?' ) {
            list_person_domains $pers, $kn, 1;
            next;
        }
	if ( $act eq 'h?' ) { list_person_hardware( $pers,   2 ); next; }
	if ( $act eq 'H?' ) { list_person_hardware( $pers, 1|2 ); next; }
        if ( $act eq 'm?' ) { list_person_postfach( $pers, $kn ); next; }
        if ( $act eq 'w?' ) { list_person_webspace( $pers, $kn ); next; }
        if ( $act =~ /^w\s*(.+)/ ) {
            $act = $1;
			$act = DoFn("SELECT id FROM adresse WHERE kurz=${\qquote($1)}")
				if $act !~ /^\d+$/;
			if($act) {
				my ( $adresse, $url ) = print_adresse($act);
				print "$adresse\n<$url>\n";
			} else {
				problem "Dieses Adresskürzel kennen wir nicht!";
			}
			next; }
        if ( $act eq 'l' ) { list_person($pers); next; }
        if ( $act eq 'll' ) { list_person($pers,2); next; }
	if ( $act eq 'N' ) { set_nagiosconf( person => $pers, $kn ); next; }
        if ( $act eq 'del' ) {
            return undef
              if delete_person( $pers, $kn );
            next;
}
        if ( $act eq 'ur' || $act eq 'ui' ) {
            print <<_;

Bitte nimm zur Kenntnis, dass die ehemaligen Funktionen "ur" und "ui" im Rahmen
von RT#201422 in "pi" bzw. "ri" umbenannt wurden, damit Du jetzt erstmal scharf
nachdenkst, was Du eigentlich willst:

* Verwende "pi", wenn Du die Peer-Adresse des Gegenübers konfigurieren möchtest
  (=> "Framed-IP-Address").
* Verwende "ri" nur, um ggf. zusätzliche IP-Adressbereiche über diesen Link zu
  routen (=> "Framed-Route"s).

Es ist generell unsinnig, dieselben IP-Adressobjekte unter beidem einzutragen.

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

1;
