use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(check_person_braucht_nicht line_in log_update);
use Dbase::Help qw(Do DoFn qquote);
use Dbase::Globals qw(aufzaehlung content find_descr gen_passwd);
use Fehler qw(warnung);

sub set_person_passwort($$;$) {
	my($pers,$kn,$force) = @_;
	$force = 0 unless defined $force;

	my $pass;
	if($force == 2) {
		do {
			$pass = gen_passwd(7+int(rand(2)));
		} while(DoFn("select count(*) from person where pass=${\qquote $pass}"));

		print "    $pass\rPW:";
		my $xpw = line_in("",1);
		local($|)=1;
		print " ","*"x(length $pass),"\r"," "x(4+length $pass)."\r";
	} else {
		content ( $pass = line_in "Passwort    : ",1 ) or return;
	}

	if($pass eq "-") {
		return unless check_person_braucht_nicht( $pers, 'pass' );
		log_update("person","id",$pers,undef,"passwort","-");
		Do("update person set pass=NULL where id=$pers");
	} else {
		if($force != 2) {
			my $past = line_in "Nochmal PW  : ",1;
			return if $past =~ /^\s*$/;
			if($pass ne $past) {
				print "Die stimmen nicht überein!\n";
				print "Einmal Fingerübungen machen und dann nochmal probieren.\n";
				return;
			}
		}
		if(!$force and DoFn("select count(*) from person where pass=${\qquote $pass}")) {
			print "Paßwort NICHT gesetzt, weil der Text bereits bekannt ist!\n";
			# Jaja, eigentlich hat den nur jemand anders als PW.
			# Trotzdem.
			return undef;
		}

		{
			( my $sonderzeichen = $pass ) =~ y/ -\177//d;
			if ( length($sonderzeichen) ) {
				warnung('Sonderzeichen wie '
					  . aufzaehlung( split //, $sonderzeichen )
					  . " können hier zu Problemen führen, vgl. RT#375383.\n=> Kennwort bitte möglichst nochmal ändern!"
				);
			}
		}
		log_update("person","id",$pers,undef,"passwort");
		Do("update person set pass=${\qquote $pass} where id=$pers");
		if ( defined( my $mysql_flag = find_descr pwdomain => 'mysql' ) ) {
			warnung(<<'1') if DoFn(<<2);
Zu diesem Account gibt's offenbar eine mysql-Datenbank bzw. einen gleichnamigen
User dazu. Dessen Kennwort wird NICHT automatisch mit geändert. Der Kunde kann
das aber mit "SET PASSWORD=PASSWORD('neues_Passwort');" selbst tun, ansonsten
hilft Team Admin.
1
	SELECT pwuse & (1<<$mysql_flag) FROM person WHERE id = $pers
2
		}
	}
	1;
}

1;
