use utf8;
use warnings; no warnings "redefine";
use strict;

use Dbase::Globals qw(content);
use Dbase::Help qw(DoFn DoSelect qquote);
use Loader qw(
  edit_messstellen
  edit_messsystem
  edit_messtypen
  line_in 
  list_messsysteme
  strip_kn
);
use Fehler qw(problem report_fehler);

my %suchfeld = (
    'l' => 'mess_stelle',
);
my %suche = (
    n => 'name',
    i => 'info',
);

sub edit_eems($) {
    my ( $kn ) = @_;
    $kn .= ' EEMS';
    aloop: while ( content( my $act = line_in "$kn >", 4 ) ) {
        ( $act, my @select ) = split ' ', $act;

        for (@select) {
            unless ( $act =~ m/^${\ join '|', keys %suchfeld }\s*/o ) {
                problem "Unbekannte Suchmethode: $act in Verbindung mit Parametern";
                next aloop;
            }
            unless ( s/^(${\ join '|', keys %suche })(:)\s*//o ) {
                problem "Unbekannte Suchmethode: $_";
                next aloop;
            }
            else {
                $_ = "%$_" unless /^%/;
                $_ .= '%'  unless /%$/;
                $_ = "$suchfeld{$act}.$suche{$1} " . ( length() ? "LIKE ${\ qquote($_) }" : 'IS NULL' );
            }
        }

        if ( $act eq '?' ) {
            print <<'_';

l       Auflistung aller Messsysteme des EEMS

Bei der Auflistung können jeweils zusätzlich beliebig viele mit
Whitespace getrennte Suchargumente übergeben werden:

n:...   nur die Mess... anzeigen in deren Name     zu SQL-Wildcard "..." passt
i:...   nur die Mess... anzeigen deren Infotext    zu SQL-Wildcard "..." passt

mt      Verwalten von Messtypen
ms      Verwalten von Messstellen
###     Wählt ein Messsystem aus ( ID oder FQDN )

_
            next;
        }
        if ( $act eq 'l' ) { list_messsysteme( 0, @select ); next; }
        if ( $act eq 'mt' ) { edit_messtypen($kn);   next; }
        if ( $act eq 'ms' ) { edit_messstellen($kn); next; }
        if ( $act =~ /^\d+$/ ) {

            if ( DoFn "SELECT 1 FROM mess_stelle WHERE snmp_host = $act LIMIT 1" ) {
                edit_messsystem( $act, $kn );
            }
            else {
                print "Messsystem #$act nicht gefunden.\n";
            }
            next;
        }
        if ( $act =~ /^\S+$/ ) {
            my ($msid) = DoFn <<_;
SELECT DISTINCT ipkunde.id
  FROM mess_stelle JOIN ipkunde ON mess_stelle.snmp_host = ipkunde.id
 WHERE ipkunde.name = ${\ qquote $act }
_
            if ( defined $msid ) {
                edit_messsystem( $msid, $kn );
            }
            else {
                print "Messsystem $act nicht gefunden.\n";
            }
            next;
        }

        print "Aktion '$act' kenne ich nicht. Liste mit '?'.\n";
        next;
      fehler: report_fehler(4);
    }
    undef;
}

1;
