use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_in log_update list_tarife_kurz);
use Dbase::Help qw(Do DoFn DoSelect qquote);
use Dbase::Globals qw(def_or_minus content name_kunde);

sub set_ktarif_tarif($;$$) {
	my($tari,$kn,$id) = @_;
	my $otarif;
	($id,$otarif)=DoFn("select kunde,tarifname from tarifkunde where id=$tari")
		if defined $tari;
	$otarif=DoFn("select name from tarifname where id=$otarif") if defined $otarif;

	while(1) {
		content( my $name = line_in "Name> " ) or return undef;
		if($name eq "?") {
			list_tarife_kurz($id);
			next;
		}
		my ($tarif,$kunde,$nam);
		if($name =~ /^\d+\z/) {
			($kunde,$tarif) = DoFn("select kunde,tarifname from tarifklasse where id=$name");
		} else {
			$tarif = DoFn("select id from tarifname where name=${\qquote $name}");
		}
		unless(defined $tarif) {
			print STDERR "Tarif '$name' unbekannt...\n";
			next;
		}
		my $tkid = DoFn("select id from tarifklasse where tarifname=$tarif and kunde=$id") ||
		           DoFn("select id from tarifklasse where tarifname=$tarif and kunde is null");
		unless($tkid) {
			print STDERR "Tarif '$name' gibt es für diesen Kunden nicht.\n";
			print STDERR "Er gilt (zur Zeit) für Kunde:";
			DoSelect {
				my($kid) = @_;
				print STDERR " #$kid";
			} "select kunde from tarifklasse where tarifname=$tarif";
			print STDERR "\n";
			next;
		}
		if($kunde and $kunde != $id) {
			$nam=DoFn("select name from tarifname where id=$tarif");
			print STDERR "Der Tarifname #$name '$nam'\ngehört zu Kunde #$kunde '".name_kunde($kunde)."'.\nBist du sicher??\n";
		}
		return $tarif if not defined $tari;

		log_update("tarifkunde","id",$tari,undef,"tarifname",undef,def_or_minus($otarif));
		Do("update tarifkunde set tarifname=$tarif where id=$tari");
		Do("update kunde set geaendert=UNIX_TIMESTAMP(NOW()) where id=$id");
		last;
	}
}
1;
