#!/usr/bin/perl

use strict;
use warnings;
use perunServicesInit;
use perunServicesUtils;

local $::SERVICE_NAME = "mailaliases_generic";
local $::PROTOCOL_VERSION = "3.0.0";
my $SCRIPT_VERSION = "3.0.1";

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

#Constants

our $A_RESOURCE_MAILALIASES_TARGET_USER; *A_RESOURCE_MAILALIASES_TARGET_USER = \'urn:perun:resource:attribute-def:def:mailaliasesTargetUser';
our $A_USER_MAILALIASES_GENERIC_MAIL;    *A_USER_MAILALIASES_GENERIC_MAIL    = \'urn:perun:user:attribute-def:def:mailaliasesGenericMail';
our $A_USER_MAIL;                        *A_USER_MAIL =                        \'urn:perun:user:attribute-def:def:preferredMail';

my $fileName = "$DIRECTORY/perun_generic";
open FILE,">$fileName" or die "Cannot open $fileName: $! \n";

my %mailByLogin;
foreach my $resourceId ($data->getResourceIds()) {

	my $resourceMailAliasesTargetUser = $data->getResourceAttributeValue(resource => $resourceId, attrName => $A_RESOURCE_MAILALIASES_TARGET_USER);

	for my $memberId ($data->getMemberIdsForResource(resource => $resourceId)) {

		my $genericMail = $data->getUserAttributeValue( member => $memberId, attrName => $A_USER_MAILALIASES_GENERIC_MAIL);
		my $userMail = $data->getUserAttributeValue( member => $memberId, attrName => $A_USER_MAIL);

		if (defined $genericMail) {
			$mailByLogin{$resourceMailAliasesTargetUser}->{$genericMail} = 1;
		} else {
			$mailByLogin{$resourceMailAliasesTargetUser}->{$userMail} = 1;
		}
	}
}

foreach my $login (sort keys %mailByLogin) {
	print FILE $login . ": ";
	print FILE join ',', keys %{$mailByLogin{$login}};
	print FILE "\n";
}

close (FILE) or die "Cannot close $fileName: $! \n";
perunServicesInit::finalize;
