use utf8;
use warnings; no warnings "redefine";
use strict;

use Dbase::Globals qw(content is_valid_username mpersinfo);
use Dbase::Help qw(Do DoFn qquote);
use Loader qw(
	check_monitoring_person
	check_mailrules_auf_username
	check_person_braucht_nicht
	line_in
	line_ja_nein
	log_update
  );
use Fehler qw(problem report_status warnung);

sub set_person_username($;$) {
	my($pers,$kn) = @_;
	if ( my @adr = check_mailrules_auf_username($pers) ) {
		return problem "Dieser Username kann nicht geändert werden,\nsolange folgende Mail-Regel"
		               . (@adr == 1 ? ' darauf zeigt' : 'n darauf zeigen')
		               . ":\n\t"
		               . join "\n\t", @adr;
	}
	my($ouser,$flags) = DoFn( "SELECT user, pwuse FROM person WHERE id = $pers" );
	unless ( defined $ouser ) { $ouser = '-' }
	elsif ($flags) {
		warnung(<<_);
Du bist im Begriff, den Usernamen einer Person zu ändern, die Flags hat.
Ich hoffe, Du weißt, was Du da tust. Diverse Dienste (z. B. ggf. WWW- und
Radius-Accounting) könnten auf die Nase fallen.
_
		check_monitoring_person($pers);
		report_status();
	}
	content ( my $user = line_in "Username    : " ) or return undef;
	return if $user eq $ouser;

	if($user eq "-") {
		return problem "Der Username kann nicht gelöscht werden, da Flags gesetzt sind.\n" if $flags;
		return unless check_person_braucht_nicht( $pers, 'user' );
		log_update("person","id",$pers,undef,"user","-",undef,$ouser);
		Do("update person set user=NULL where id=$pers");
	} else {
		return problem(<<_) unless is_valid_username($user);
Usernamen beginnen mit einem Kleinbuchstaben,
bestehen aus den Zeichen a-z 0-9 % - . _
und sind maximal 32 Zeichen lang.
_
		my $un = DoFn("select id from person where user=${\qquote $user}");
		if(not $un or $un == $pers) {

			if ( ( my $chars = length($user) ) > 16 ) {
				warnung(<<_);
Dieser Benutzername ist länger als 16 Zeichen (nämlich $chars Zeichen).
Er kann daher nicht für MySQL-Datenbanken verwendet werden.
_
				return unless line_ja_nein('Trotzdem eintragen');
			}
			log_update( person => id => $pers, undef, user => $ouser eq '-' ? '*' : (undef,$ouser) );
			Do("update person set user=${\qquote $user} where id=$pers");
		} else {
			problem "Dieser Username ist schon an Person #$un:".mpersinfo($un)." vergeben.\n";
		}
	}
}

1;
