#!/usr/bin/perl

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

our $SERVICE_NAME = "o365_contacts_export";
our $PROTOCOL_VERSION = "3.0.0";
our $SCRIPT_VERSION = "3.0.1";

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

#Constants
our $A_USER_LOGIN_MU;                          *A_USER_LOGIN_MU =                         \'urn:perun:user:attribute-def:def:login-namespace:mu';
our $A_USER_O365_EMAIL_ADDRESSES;              *A_USER_O365_EMAIL_ADDRESSES =             \'urn:perun:user:attribute-def:def:o365EmailAddresses:mu';
our $A_FACILITY_O365_ALLOWED_DOMAINS;          *A_FACILITY_O365_ALLOWED_DOMAINS =         \'urn:perun:facility:attribute-def:def:o365ContactExportAllowedDomains';

#open file
my $file_name = "$DIRECTORY/$::SERVICE_NAME";
open FILE,">$file_name" or die "Cannot open $file_name: $! \n";

my %allowedDomains = map { $_ => 1 } @{$data->getFacilityAttributeValue( attrName => $A_FACILITY_O365_ALLOWED_DOMAINS )};

my $memberDataByLogin;
foreach my $memberId ($data->getMemberIdsForFacility()) {
	my $login = $data->getUserAttributeValue( member => $memberId, attrName => $A_USER_LOGIN_MU );
	my @emailAddresses = @{$data->getUserAttributeValue( member => $memberId, attrName => $A_USER_O365_EMAIL_ADDRESSES )};

	my @allowedEmails = ();
	foreach my $email (@emailAddresses) {
		my $emailDomain = $email;
		$emailDomain =~ s/^.*@//g;
		if($allowedDomains{$emailDomain}) {
			push @allowedEmails, $email;
		}
	}

	@allowedEmails = uniqList @allowedEmails, @{$memberDataByLogin->{$login}};
	$memberDataByLogin->{$login} = \@allowedEmails;
}

#print data to file
foreach my $login (keys %$memberDataByLogin) {
	foreach my $email (@{$memberDataByLogin->{$login}}) {
		print FILE $login . ',' . $email . "\n";
	}
}

close(FILE);
#####################################################
perunServicesInit::finalize;
