use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(content);
use Dbase::Help qw(DoFn qquote);
use Fehler qw(report_fehler);
use Loader qw(
  add_messstelle
  add_messverbraucher
  edit_messstelle
  edit_messverbraucher
  line_in
  list_messstellen
  list_messverbrauchers
  strip_kn
);

# idi = hardware.id
sub edit_messverbrauchers($;$) {
    my ( $idi, $kn ) = @_;

    my $okn = strip_kn($kn);
    $kn = $okn . 'Verbraucher';
    while ( content( my $act = line_in "$kn >", 4 ) ) {
        if ( $act eq '?' ) {
            print <<_;
l    zeigt alle Assoziierungen der Hardware zu Messstellen
L    zeigt alle, auch beendete Assoziierungen der Hardware zu Messstellen
ls   zeigt alle Messstellen an, die keiner Hardware zugeordnet sind
Ls   zeigt alle Messstellen an, auch die, die einer Hardware zugeordnet sind

a    Assoziiert das Hardware Objekt mit einer Messstelle
###  Wählt einen Verbraucher aus

_
            next;
        }
        if ( $act eq 'l'  ) { list_messverbrauchers( 0, 'mess_verbraucher.hardware = ' . $idi ); next; }
        if ( $act eq 'L'  ) { list_messstellen( 8, 'mess_verbraucher.hardware = ' . $idi ); next; }
        if ( $act eq 'ls' ) { list_messstellen(4); next; }
        if ( $act eq 'Ls' ) { list_messstellen(2); next; }
        if ( $act eq 'a'  ) { add_messverbraucher( $kn, undef, undef, $idi ); next; }
        if ( $act =~ /^\d+$/) {

            my ( $cntmv ) = DoFn 'SELECT count(*) FROM mess_verbraucher WHERE mess_verbraucher.mess_stelle = ' . qquote($act);
            print <<END if $cntmv > 1;

*** Vorsicht: Du bearbeitest gerade Verbraucher #$idi.
              Diese Messstelle gehört aber auch zu $cntmv anderen Verbrauchern!

END

            my ($id) = DoFn 'SELECT id FROM mess_verbraucher WHERE id = ' . qquote($act);
            if ( defined $id ) {

                my ( $hwid ) = DoFn 'SELECT hardware FROM mess_verbraucher WHERE id = ' . qquote($act);
                print <<END if !$hwid or $hwid != $idi;

*** Vorsicht: Du bearbeitest gerade Hardware #$idi.
              Dieser Verbraucher gehört aber zur Hardware #$hwid!

END
                edit_messverbraucher( $id, $okn );
            }
            else {
                print "Messverbraucher $act nicht gefunden.\n";
            }
            next;
        }
        print "Aktion '$act' unbekannt.\n";
        next;
        report_fehler(4);
    }
    $idi;
}

1;
