use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(content);
use Dbase::IP;
use Dbase::Help qw(DoFn DoSelect qquote);
use Fehler qw(report_fehler);
use Loader qw(
  add_messstelle
  edit_messtyp
  edit_messstelle
  line_in
  list_messsystem
  list_messstellen
  list_messtypen
  set_messsystem_snmp_host
);

# idi = ipkunde.id = mess_stelle.snmp_host
sub edit_messsystem($;$) {
    my ( $idi, $kn ) = @_;

    my ( $ip6, $bits, $name ) = DoFn "SELECT ip6, bits, name FROM ipkunde WHERE id = $idi";
    unless ($name) {
        my $ipo = Dbase::IP->new_db( $ip6, $bits );
        $name = $ipo->str(4);
    }
    while ( content( my $act = line_in "$kn Messsystem $idi:$name>", 4 ) ) {
        if ( $act eq '?' ) {
            print <<_;
l      Details des Messsystems
ls     Auflistung aller Messstellen dieses Messsystems
Ls     Auflistung aller Messstellen dieses Messsystems,
       auch ohne Verbraucherzuordnung
lt     Auflistung aller Messtypen des Messsystems

a      Fügt eine neue Messstelle hinzu
ip     Ändern der SNMP Hosts für dieses Messsystem
       (Es werden alle zugehörigen Messstellen auf den neuen Host gesetzt!)

###    Wählt eine Messstelle aus
mt:### Wählt einen Messtyp aus

_
            next;
        }
        if ( $act eq 'l' )  { list_messsystem($idi); next; }
        if ( $act eq 'ls' ) { list_messstellen( 0, "snmp_host = $idi" ); next; }
        if ( $act eq 'Ls' ) { list_messstellen( 2, "snmp_host = $idi" ); next; }
        if ( $act eq 'lt' ) {
            my @mts;
            DoSelect{ push @mts, @_; }
               "SELECT DISTINCT typ FROM mess_stelle WHERE snmp_host = $idi";

            if (@mts) {
                list_messtypen(" id IN ('" . join("','", @mts) . "')"  );
            }
            else {
                print "Keine Messtypen in diesem Messsystem gefunden.\n";
            }
            next;
        }
        if ( $act eq 'a'  ) { add_messstelle($kn, $idi); next; }
        if ( $act eq 'ip' ) { return if set_messsystem_snmp_host($idi, $kn); next; }
        if ( $act =~ /^mt:(\d+)$/ ) {

            my ($oid) = DoFn(<<_);
SELECT id FROM mess_stelle
 WHERE snmp_host = $idi
   AND typ = ${ \qquote($1) }
 LIMIT 1
_

            print <<END unless $oid;

*** Vorsicht: Dieser Messstyp gehört nicht zum Messsystem #$idi!

END

            if ( my ($id, $mt) = DoFn "SELECT id FROM mess_typ WHERE id = $1" ) {
                edit_messtyp($id, $kn);
            }
            else {
                print "Messtyp #$1 nicht gefunden.\n";
            }
            next;
        }
        if ( $act =~ /^\d+$/ ) {
            my ( $id, $msid ) = DoFn
              'SELECT mess_stelle.id, mess_stelle.snmp_host FROM mess_stelle WHERE mess_stelle.id = '
              . qquote $act;

            if ( defined $id ) {
                print <<END if $msid and $idi != $msid;

*** Vorsicht: Du bearbeitest gerade Messsystem #$idi.
              Diese Messstelle gehört aber zu Messsystem #$msid!

END

                edit_messstelle( $id, $kn );
            }
            else {
                print "Messstelle $act nicht gefunden.\n";
            }
            next;
        }
        print "Aktion '$act' unbekannt.\n";
        next;
        report_fehler(4);
    }
    $idi;
}

1;
