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

sub set_hardware_ip($;$$) {
	my ( $id, $kn, $kunde ) = @_;
	$kunde ||= DoFn "SELECT kunde FROM hardware WHERE id = $id" if defined $id;
	defined( my $ip = edit_ipaddrs( $kunde, 1 | 2 | 4, 'primäre IP-Adresse' ) )
	  or return;
	# TODO:
	# evtl. mit check_overlap() prüfen und mehrere identische Zuweisungen erlauben,
	# sofern sie sich zeitlich nicht überschneiden
	if ( $ip eq '-' ) { undef $ip }
	elsif (
		DoFn(
			"SELECT COUNT(*) FROM hardware_ip WHERE hardware = $id AND ip = $ip"
		)
	  )
	{
		return problem(
			'Diese IP-Adresse ist bereits als Interface-IP zugeordnet.');
	}
	elsif ( defined( my $other = DoFn "SELECT id FROM hardware WHERE ip = $ip AND id != $id" ) ) {
		return problem "Dieses IP-Adressobjekt ist bereits Hardwarekomponente #$other zugeordnet."
	}
	return $ip unless defined $id;
	my $old_ip = DoFn "SELECT ip FROM hardware WHERE id = $id";
	return if defined $old_ip ? defined $ip && $old_ip == $ip : !defined $ip;
	log_update hardware =>
	  id                => $id,
	  undef,
	  ip => undef,
	  defined $old_ip ? $old_ip : '-';
	$ip = 'NULL' unless defined $ip;
	Do "UPDATE hardware SET ip=$ip WHERE id = $id";
}

1;
