#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long qw(:config no_ignore_case);
use Perun::Agent;
use Perun::Common qw(printMessage);

sub help {
	return qq{
	Updates user. User id is required.
	--------------------------------------
	Available options:
	--userId      | -u user id
	--firstName   | -f first name for update
	--lastName    | -n family name for update
	--middleName  | -d middle name for update
	--titleBefore | -t title used before the name for update
	--titleAfter  | -T title used after the name for update
	--batch       | -b batch
	--help        | -h prints this help

	};
}

my ($userId, $firstName, $lastName, $middleName, $titleBefore, $titleAfter, $batch);
GetOptions ("help|h" => sub { print help(); exit 0;} ,"batch|b" => \$batch,
"userId|u=i" => \$userId, "firstName|f=s" => \$firstName,
 "lastName|n=s" => \$lastName, "middleName|d=s" => \$middleName,
 "titleBefore|t=s" => \$titleBefore, "titleAfter|T=s" => \$titleAfter) || die help();

# Check options
unless (defined($userId)) { die "ERROR: userId is required \n";}

my $agent = Perun::Agent->new();
my $usersAgent = $agent->getUsersAgent;

my $user = $usersAgent->getUserById(id => $userId);

if (defined($firstName)) {
	unless ($firstName !~ /^\s*$/) { die "ERROR: firstName cannot be empty string\n";}
	$user->setFirstName($firstName);
}

if (defined($lastName)) {
	unless ($lastName !~ /^\s*$/) { die "ERROR: lastName cannot be empty string\n";}
	$user->setLastName($lastName);
}

if (defined($middleName)) {
	$user->setMiddleName($middleName);
}

if (defined($titleBefore)) {
	$user->setTitleBefore($titleBefore);
}

if (defined($titleAfter)) {
	$user->setTitleAfter($titleAfter);
}

$user = $usersAgent->updateUser(user => $user);

printMessage("User Id:$userId successfully updated", $batch);
