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

sub set_messstelle_typ($;$) {
    my ( $idi, $kn ) = @_;
    while ( content( my $typ = line_in 'Typ: ' ) ) {

        if ( $typ eq '?' ) {
            print <<_;
l     List der Messtypen
###   Messtyp auswählen
-     Messtyp löschen
_
            next;
        }

        if ( $typ eq 'l' )   { list_messtypen(); next; }
        if ( $typ eq '-' or $typ =~ /^\d+$/ ) {

            if ( $typ eq '-' ) {
                $typ = '0';
            }
            else {
                $typ = qquote $typ;
                unless ( DoFn "SELECT id FROM mess_typ WHERE id = $typ" ) {
                    problem "Messtyp kenne ich nicht!\n";
                    next;
                }
            }
            return $typ unless defined $idi;

            my ($name, $snmp_host) = DoFn "SELECT name, snmp_host FROM mess_stelle WHERE id = $idi";
            my ($other_msid) = DoFn <<_;
SELECT mess_stelle.id
  FROM mess_stelle
 WHERE mess_stelle.name = ${\qquote $name}
   AND mess_stelle.id != $idi
   AND mess_stelle.snmp_host = ${\qquote $snmp_host}
   AND mess_stelle.typ = $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.");
            }

            log_update mess_stelle => id => $idi, undef, 'typ', undef,
              DoFn("SELECT typ FROM mess_stelle WHERE id = $idi");
            Do "UPDATE mess_stelle SET typ = $typ WHERE id = $idi";
            return;
        }
        problem "Messtyp $typ kenne ich nicht!\n";
        return;
    };

    return;
}

1;
