use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(Do DoFn);
use Fehler qw(problem);
use Loader qw(
  current_user
  edit_messstelle
  line_in
  log_update
  set_messstelle_info
  set_messstelle_name
  set_messstelle_oid
  set_messstelle_snmp_host
  set_messstelle_typ
);

sub add_messstelle($;$) {
    my ($kn, $snmp_id) = @_;

    defined( my $name       = set_messstelle_name( undef,      $kn ) ) or return;
    defined( my $typ        = set_messstelle_typ( undef,       $kn ) ) or return;
    defined( my $snmp_host  = set_messstelle_snmp_host( undef, $kn, undef, $snmp_id ) ) or return;
    defined( my $oid_suffix = set_messstelle_oid( undef,       $kn ) ) or return;

    my ($other_msid) = DoFn <<_;
SELECT mess_stelle.id
  FROM mess_stelle
 WHERE mess_stelle.name = $name
   AND mess_stelle.snmp_host = $snmp_host
   AND mess_stelle.typ = ( SELECT typ FROM mess_stelle WHERE name = $typ )
 LIMIT 1
_

    if ( defined $other_msid ) {
        return problem("Die Kombination von Name, SNMP Host und Typ ist schon in der Messstelle #$other_msid vergeben.");
    }

    if ( $oid_suffix ne 'NULL' ) {
        my ($other_oid) = DoFn <<_;
SELECT id
  FROM mess_stelle
 WHERE oid_suffix = $oid_suffix
   AND snmp_host = $snmp_host 
_

        return problem("Dieser OID Suffix ist schon in der Mess Stelle #$other_oid vergeben.")
          if ( defined $other_oid );
    }

    my $info = set_messstelle_info( undef, $kn );

    my $id = Do <<_;
        INSERT INTO mess_stelle
        SET name       = $name,
            typ        = $typ,
            snmp_host  = $snmp_host,
            oid_suffix = $oid_suffix,
            beginn     = UNIX_TIMESTAMP(NOW()),
            ende       = NULL,
            info       = $info
_

    log_update mess_typ => id => $id, undef, '*';
    edit_messstelle $id, $kn;
}

1;
