use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(Do DoFn qquote);
use Dbase::Globals qw(content);
use Fehler qw(problem);
use Loader qw(edit_ipaddrs line_in log_update);

sub set_messstelle_snmp_host($;$$$) {
    my ( $idi, $kn, $wert, $template ) = @_;

    my $snmp_host = $wert;
    unless ( defined $snmp_host ) {
        defined( $snmp_host = edit_ipaddrs( '1', 1 | 2 | 4, 'SNMP Host:' ) ) or return;
        #content( $snmp_host = line_in 'SNMP Host: ', undef, undef, $template )
        #  or return;
    }

    my $snmp_host_id;
    if ( $snmp_host eq "-" ) {
        $snmp_host_id = 'NULL';
    }
    elsif ( $snmp_host =~ /^\d+\z/ ) {
        ($snmp_host_id) = DoFn "SELECT id FROM ipkunde WHERE id = " . qquote($snmp_host);
    }
    else {
        ($snmp_host_id) = DoFn "SELECT id FROM ipkunde WHERE name  = " . qquote($snmp_host);
    }

    return problem "SNMP Host $snmp_host nicht gefunden.\n"
      unless defined $snmp_host_id;

    $snmp_host_id = $snmp_host eq '-' ? 'NULL' : qquote($snmp_host_id);
    return $snmp_host_id unless defined $idi;

    if ( $snmp_host_id ne 'NULL' ) {
        my ( $ms_name, $ms_typ, $ms_oid_suffix ) =
          DoFn "SELECT name, typ, oid_suffix FROM mess_stelle WHERE id = $idi";
        my ($other_msid) = DoFn <<_;
SELECT mess_stelle.id
  FROM mess_stelle
 WHERE mess_stelle.name = ${\qquote $ms_name}
   AND mess_stelle.typ  = ${\qquote $ms_typ}
   AND mess_stelle.snmp_host = ${\qquote $snmp_host}
   AND mess_stelle.id != $idi
   AND ( mess_stelle.ende IS NULL OR mess_stelle.ende > UNIX_TIMESTAMP(NOW()) )
 LIMIT 1
_

        return problem "Es gibt schon eine Messstelle mit dem gleichen Namen, Typ und SNMP Host.\n"
          if $other_msid;

        ($other_msid) = DoFn <<_;
SELECT mess_stelle.id
  FROM mess_stelle
 WHERE mess_stelle.oid_suffix = ${\qquote $ms_oid_suffix}
   AND mess_stelle.snmp_host = ${\qquote $snmp_host}
   AND mess_stelle.typ  = ${\qquote $ms_typ}
   AND mess_stelle.id != $idi
   AND ( mess_stelle.ende IS NULL OR mess_stelle.ende > UNIX_TIMESTAMP(NOW()) )
 LIMIT 1
_

        return problem "Es gibt schon eine Messstelle mit dem gleichen SNMP Host und OID Suffix.\n"
          if $other_msid;
    }

    log_update mess_stelle => id => $idi, undef, 'snmp_host', undef,
      DoFn("SELECT snmp_host FROM mess_stelle WHERE id = $idi");
    Do "UPDATE mess_stelle SET snmp_host = $snmp_host WHERE id = $idi";
}

1;
