use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(Do DoFn qquote);
use Fehler qw(problem);
use Loader qw(
  log_update
  edit_messverbraucher
  set_messverbraucher_hardware
  set_messverbraucher_kunde
  set_messverbraucher_messstelle
);

# flags & 1: Kein edit_messverbraucher danach
sub add_messverbraucher($;$$$$$$) {
    my ( $kn, $flags, $ms, $hw, $kid, $acct, $ende, ) = @_;
    $flags = 0 unless defined $flags;

    unless (defined $ms) {
        defined( $ms = set_messverbraucher_messstelle( undef, $kn ) ) or return;
    }
    unless (defined $hw) {
        defined( $hw = set_messverbraucher_hardware( undef, $kn ) ) or return;
    }
    unless (defined $kid) {
        my $kunde = DoFn "SELECT kunde FROM hardware WHERE id = $hw";
        defined( $kid = set_messverbraucher_kunde( undef, $kn, $kunde ) ) or return;
    }
    $acct = 'n' unless defined $acct;
    $ende = 'NULL' unless defined $ende;

    my ($other_oid) = DoFn <<_;
SELECT id
  FROM mess_verbraucher
 WHERE mess_stelle = $ms
   AND hardware = $hw
   AND kunde = $kid
   AND ( ende IS NOT NULL OR ende >= UNIX_TIMESTAMP( NOW() ) )
_

   return problem("Dieser Kombination von Messverbraucher gibt es schon in #$other_oid.")
     if ( defined $other_oid );

    my $id = Do <<_;
        INSERT INTO mess_verbraucher
        SET mess_stelle = $ms,
            hardware    = $hw,
            beginn     = UNIX_TIMESTAMP(NOW()),
            ende       = $ende,
            acct       = ${ \qquote $acct },
            kunde      = $kid
_

    log_update mess_verbraucher => id => $id, undef, '*';
    edit_messverbraucher $id, $kn unless $flags & 1;
}

1;
