use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(DoFn);
use Dbase::Globals qw(content);
use Fehler qw(report_fehler);
use Loader qw(
  add_kunde_hardware
  add_wartungsvertrag_zuordnung
  delete_hardware
  edit_messverbrauchers
  edit_wartungsvertrag_zuordnung
  get_hardware_console
  line_in list_hardware log_view
  set_hardware_console
  set_hardware_datum
  set_hardware_eigentuemer
  set_hardware_enthalten_in
  set_hardware_flags
  set_hardware_hardware_id
  set_hardware_info
  set_hardware_interface_ip
  set_hardware_ip
  set_hardware_ivnr
  set_hardware_klasse
  set_hardware_kunde
  set_hardware_lieferant
  set_hardware_name
  set_hardware_seriennr
  set_hardware_standort
  set_hardware_status
  set_hardware_tarif
  set_hardware_typ
  set_hardware_verantwortlich
  strip_kn
  valid_kunde
  warn_arbeit warn_kunde );

sub edit_hardware($;$$);
sub edit_hardware($;$$) {
	my ( $idi, $okn, $kunde ) = @_;
	my( $name, $enthalten_in ) = DoFn("SELECT name, enthalten_in FROM hardware WHERE id = $idi");
	my $kn = strip_kn($okn) . "Hardware_$idi:$name";
	warn_arbeit hardware => $idi, '*', $kunde;
	warn_kunde hardware => $idi, $kunde if defined $kunde;
	while ( content( my $act = line_in "$kn >", 4 ) ) {
		if ( $act eq '?' ) {
			print <<'1', defined $enthalten_in && <<'2', <<'3';
a   neues Hardware-Objekt mit diesem als Template anlegen
l   anzeigen
ll  ausführlichere Anzeige (mit Link auf Landkarte)
L   anzeigen inkl. bereits beendeter Wartungsverträge
n   Namen ändern
t   Tarif zuordnen
T   Typ editieren
k   Klasse editieren
id  Hardware-ID editieren
iv  Inventarnummer editieren
sn  Seriennummer editieren
p   Referenz auf andere Hardwarekomponente setzen, in die diese eingebaut ist
1
P   zu dieser übergeordneten Hardwarekomponente springen
2
st  Standort editieren
s   Status editieren
lf  Lieferant editieren
ip  primäre IP-Adresse editieren
IP  Interface-IP-Adressen editieren
c   Console-Server editieren
C   SSH-Verbindung zu Console-Server aufbauen
i   Zusatzinfo editieren
e   Eigentümer editieren
v   Verantwortlichen editieren
f   Flags editieren
mv  Verbraucher
x   Beginn- und/oder Ende-Datum bearbeiten
del Objekt komplett aus Datenbank löschen (wegen Fehleingabe)
K   anderem Kunden zuordnen ("schon immer" <=> Eintrag wird NICHT repliziert)
w   Wartungsvertrag zuordnen
w#  Wartungsvertragszuordnung Nummer # editieren
3
			next;
		}
		if ( $act eq 'a' )  {
			if ( add_kunde_hardware $kunde, $kn, $idi ) { return }
			else { next }
		}
		if ( $act eq 'l' )  { list_hardware( $idi, 4 ); next; }
		if ( $act eq 'll' ) { list_hardware( $idi, 2 ); next; }
		if ( $act eq 'L' )  { list_hardware $idi, 1; next; }
		if ( $act eq 'LL' ) { list_hardware( $idi, 3 ); next; }
		if ( $act eq 'n' )  { set_hardware_name $idi, $kn;
			$name = DoFn("select name from hardware where id=$idi");
			$kn = strip_kn($okn) . "Hardware_$idi:$name";
			next; }
		if ( $act eq 't' )  { set_hardware_tarif $idi, $kn; next; }
		if ( $act eq 'T' )  { set_hardware_typ $idi, $kn; next; }
		if ( $act eq 'k' )  { set_hardware_klasse $idi, $kn; next; }
		if ( $act eq 'id' ) { set_hardware_hardware_id $idi, $kn; next; }
		if ( $act eq 'iv' ) { set_hardware_ivnr $idi, $kn; next; }
		if ( $act eq 'sn' ) { set_hardware_seriennr $idi, $kn; next; }
		if ( $act eq 'p'  ) {
			set_hardware_enthalten_in( $idi, $kn );
			$enthalten_in = DoFn("SELECT enthalten_in FROM hardware WHERE id = $idi");
			next;
		}
		if ( $act eq 'P' && defined $enthalten_in ) {
			edit_hardware( $enthalten_in, $kn );
			next;
		}
		if ( $act eq 's'  ) { set_hardware_status $idi, $kn; next; }
		if ( $act eq 'st' ) { set_hardware_standort $idi, $kn; next; }
		if ( $act eq 'lf' ) { set_hardware_lieferant $idi, $kn; next; }
		if ( $act eq 'ip' ) { set_hardware_ip $idi, $kn, $kunde; next; }
		if ( $act eq 'IP' ) { set_hardware_interface_ip( $idi, $kunde ); next; }
		if ( $act eq 'c' ) { set_hardware_console $idi, $kn; next; }
		if ( $act eq 'C' ) { get_hardware_console $idi; next; }
		if ( $act eq 'e' ) { set_hardware_eigentuemer $idi, $kn, $kunde; next; }
		if ( $act eq 'v' ) { set_hardware_verantwortlich( $idi, $kn, $kunde ); next; }
		if ( $act eq 'f' ) { set_hardware_flags $idi, $kn; next; }
		if ( $act eq 'mv' ) { edit_messverbrauchers $idi, $kn; next; }
		if ( $act eq 'i' ) { set_hardware_info $idi, $kn; next; }
		if ( $act eq 'x' ) { set_hardware_datum $idi, $kn; next; }
		if ( $act eq 'del' ) { return undef if delete_hardware( $idi, $kn ); next; }
		if ( $act eq 'K' ) { set_hardware_kunde( $idi, $kn ); next; }
		if ( $act eq 'w' ) {
			add_wartungsvertrag_zuordnung hardware => $idi, $kn;
			next;
		}
		if ( $act =~ /^w\s*(\d+)$/ ) {
			edit_wartungsvertrag_zuordnung hardware => $1, $kn;
			next;
		}
		if ( $act eq 'H' ) { log_view $kn, hardware => id => $idi; next; }
		print "Aktion '$act' unbekannt.\n";
		next;
		fehler: report_fehler(4);
	}
	$idi;
}

1;
