use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(DoFn);
use Dbase::Globals qw(content);
use Fehler qw(problem report_fehler);
use Loader qw( add_wartungsvertrag_zuordnung
  delete_leitung
  edit_wartungsvertrag_zuordnung
  line_in
  list_leitung
  list_leitung_endpunkt
  list_leitung_hardware
  log_view
  set_leitung_art
  set_leitung_carrier
  set_leitung_datum
  set_leitung_ref2hardware
  set_leitung_ref2person
  set_leitung_kunde
  set_leitung_name
  set_leitung_name_carrier
  set_leitung_tarif
  set_leitung_infotext
  strip_kn
  valid_kunde
  warn_arbeit warn_kunde );

sub edit_leitung($;$$) {
	my ( $idi, $id, $kn ) = @_;
	{
		my $kunde = DoFn("SELECT kunde FROM leitung WHERE id = $idi")
		  or return problem("Leitung #$idi nicht gefunden.");

		return unless valid_kunde( $id ||= $kunde, 1 );
	}
	$kn = strip_kn($kn) . "Leitung_$idi";
	warn_arbeit( 'leitung', $idi, '*', $kn );
	warn_kunde( 'leitung', $idi, $id );
	while ( content( my $act = line_in "$kn >", 4 ) ) {
		if ( $act eq '?' ) {
			print <<'_';
l   anzeigen
L   anzeigen inkl. bereits beendeter Wartungsverträge
n   Namen ändern
ar  Art ändern
c   Carrier ändern
nc  Leitungsbezeichnung des Carriers ändern
i   Infotext ändern
A   A-Endpunkt                 A?  dort eingetragenes Personenobjekt anzeigen
B   B-Endpunkt                 B?  dort eingetragenes Personenobjekt anzeigen
ha  Hardware-Objekt A-Ende     ha? dort eingetragenes Hardwareobjekt anzeigen
hb  Hardware-Objekt B-Ende     hb? dort eingetragenes Hardwareobjekt anzeigen
b   Backup-Objekt ändern
t   Tarif zuordnen
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
H   Änderungs-Historie anzeigen
_
			next;
		}
		if ( $act eq 'A' || $act eq 'B' || $act eq 'b' ) {
			set_leitung_ref2person(
				{ A => 'a_ende', B => 'b_ende', b => 'backup' }->{$act},
				$idi, $kn );
			next;
		}
		if ( $act =~ /^([AB])\?\z/ ) { list_leitung_endpunkt $1 => $idi; next; }
		if ( $act =~ /^h([ab])\z/ ) {
			set_leitung_ref2hardware( $1, $idi, $kn );
			next;
		}
		if ( $act =~ /^h([ab])\?\z/ ) { list_leitung_hardware( $1 => $idi ); next; }
		if ( $act =~ /^art?\z/ ) { set_leitung_art $idi, $kn; next; }
		if ( $act eq 'c' ) { set_leitung_carrier $idi, $kn; next; }
		if ( $act eq 'H' ) { log_view $kn, leitung => id => $idi; next; }
		if ( $act eq 'K' ) { set_leitung_kunde( $idi, $kn ); next; }
		if ( $act eq 'l' ) { list_leitung $idi; next; }
		if ( $act eq 'L' ) { list_leitung $idi, 1; next; }
		if ( $act eq 'n' ) { set_leitung_name( $idi, $kn ); next; }
		if ( $act eq 't' ) { set_leitung_tarif( $idi, $kn ); next; }
		if ( $act eq 'nc' ) { set_leitung_name_carrier $idi, $kn; next; }
		if ( $act eq 'i' ) { set_leitung_infotext( $idi, $kn ); next; }
		if ( $act eq 'x' ) { set_leitung_datum( $idi, $kn ); next; }
		if ( $act eq 'del' ) { delete_leitung( $idi, $kn ); return; }
		if ( $act eq 'w' ) {
			add_wartungsvertrag_zuordnung leitung => $idi, $kn;
			next;
		}
		if ( $act =~ /^w\s*(\d+)$/ ) {
			edit_wartungsvertrag_zuordnung leitung => $1, $kn;
			next;
		}
		print "Aktion '$act' unbekannt.\n";
		next;
		fehler: report_fehler(4);
	}
	$idi;
}

1;
