#!/usr/bin/perl
use strict;
use warnings;
use perunServicesInit;
use perunServicesUtils;
use Perun::Agent;
use JSON::XS;

our $SERVICE_NAME = "crocs_user_export";
our $PROTOCOL_VERSION = "3.0.0";
my $SCRIPT_VERSION = "3.0.1";

perunServicesInit::init;
my $DIRECTORY = perunServicesInit::getDirectory;
my $data = perunServicesInit::getHashedHierarchicalData;

#Constants
our $A_USER_FIRSTNAME;            *A_USER_FIRSTNAME =        \'urn:perun:user:attribute-def:core:firstName';
our $A_USER_LASTNAME;             *A_USER_LASTNAME =         \'urn:perun:user:attribute-def:core:lastName';
our $A_USER_LOGIN;                *A_USER_LOGIN=             \'urn:perun:user:attribute-def:def:login-namespace:mu';

my $attributesByLogin;

foreach my $memberId ($data->getMemberIdsForFacility()) {
	my $login = $data->getUserAttributeValue( member => $memberId, attrName => $A_USER_LOGIN );

	$attributesByLogin->{$login}->{$A_USER_FIRSTNAME} = $data->getUserAttributeValue( member => $memberId, attrName => $A_USER_FIRSTNAME );
	$attributesByLogin->{$login}->{$A_USER_LASTNAME} = $data->getUserAttributeValue( member => $memberId, attrName => $A_USER_LASTNAME );
}


my @users;
for my $login (sort keys %{$attributesByLogin}) {
	my $values = $attributesByLogin->{$login};
	my $user = {};
	$user->{"firstname"} = $values->{$A_USER_FIRSTNAME} || "";
	$user->{"lastname"}  = $values->{$A_USER_LASTNAME} || "";
	$user->{"UCO"}       = $login;

	push @users, $user;
}

my $fileName = "$DIRECTORY/$SERVICE_NAME";
open FILE, ">$fileName" or die "Cannot open $fileName: $! \n";
print FILE JSON::XS->new->utf8->pretty->canonical->encode(\@users);
close FILE or die "Cannot close $fileName: $! \n";

perunServicesInit::finalize;
