use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(content);
use Dbase::Help qw(DoFn qquote);
use Fehler qw(problem report_fehler);
use Loader qw(
  delete_messverbraucher
  edit_messstelle
  flip_messverbraucher_acct
  line_in
  list_messverbraucher
  strip_kn
);

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

    my ( $mvid, $msid, $hwid ) = DoFn(<<_);
SELECT mess_verbraucher.id, mess_stelle.id, mess_verbraucher.hardware
  FROM mess_stelle JOIN mess_verbraucher
     ON mess_verbraucher.mess_stelle = mess_stelle.id
 WHERE mess_verbraucher.id = $idi
_

    return problem "Diesen Messverbraucher gibt es nicht!\n" unless defined $mvid;
    $kn = strip_kn($kn) . 'Verbraucher:' . $mvid;
    while ( content( my $act = line_in "$kn >", 4 ) ) {
        if ( $act eq '?' ) {
            print <<'_';
l      Details des Verbrauchers
d      Deassoziieren mit der Messstelle
r      Als (NICHT) Accounting relevant markieren
ms     Wählt DIE Messstelle aus
###    Wählt EINE Messstelle anhand der ID aus

_
            next;
        }
        if ( $act eq 'l'  ) { list_messverbraucher($idi);      next; }
        if ( $act eq 'd'  ) { delete_messverbraucher($idi);  return; }
        if ( $act eq 'r'  ) { flip_messverbraucher_acct( $idi); next; }
        if ( $act eq 'ms' ) { edit_messstelle( $msid, $kn );   next; }
        if ( $act =~ /^\d+$/ ) {

            if ( DoFn "SELECT id FROM mess_stelle WHERE id = " . qquote($act) ) {

                my ( $ohwid ) = DoFn "SELECT hardware FROM mess_verbraucher WHERE mess_stelle = $act AND hardware = $hwid";
                print <<END if !$ohwid or $hwid != $ohwid;

*** Vorsicht: Du bearbeitest gerade Messstelle #$act.
              Diese Messstelle gehört aber nicht zu dieser Hardware!

END

                edit_messstelle( $act, $kn );
            }
            else {
                print "Messstelle #$act nicht gefunden.\n";
            }
            next;
        }

        print "Aktion '$act' unbekannt.\n";
        next;
        report_fehler(4);
    }
    $idi;
}

1;
