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, $redirect ) =
	  DoFn("SELECT user, pwuse, redirect 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();
	}
	elsif ( defined $redirect ) {
		warnung(<<_);
Du bist im Begriff, den Usernamen einer Person zu ändern, für die es einen
Redirect-Web-Space gibt. Falls der schon genutzt wurde, wird dadurch zum
Monatswechsel das Accounting nicht funktionieren und schließlich der
Rechnungslauf nicht gestartet werden können, vgl. etwa Ticket 570719.
Falls das trotzdem unbedingt sein muss, öffne bitte ein Followup für Team
Admin!
_
	}

	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;
