#!/usr/bin/perl                                                                                                                     
#
# Generates members of a mailing list for sympa
#
use strict;
use warnings;
use perunServicesInit;
use perunServicesUtils;
use Text::Unidecode;
use POSIX qw/strftime/; 

local $::SERVICE_NAME = "sympa";
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_USER_NAME;                        *A_USER_NAME =                       \'urn:perun:user:attribute-def:core:displayName';
our $A_USER_MAIL;                        *A_USER_MAIL =                       \'urn:perun:user:attribute-def:def:preferredMail';
our $A_USER_STATUS;                      *A_USER_STATUS =                     \'urn:perun:member:attribute-def:core:status';

our $A_RESOURCE_MAILING_LIST_NAME;       *A_RESOURCE_MAILING_LIST_NAME =      \'urn:perun:resource:attribute-def:def:mailingListName';


my $mailinglistStruc = {};  # $mailinglistStruc->{"mailing list name"}->{"user's e-mail"}->{"user's name"}

my $mailinglistsDirectory = "$DIRECTORY/mailinglists";
mkdir $mailinglistsDirectory or die "Can't mkdir $mailinglistsDirectory: $!";


foreach my $resourceId ($data->getResourceIds()) {
	my $listName = $data->getResourceAttributeValue(resource => $resourceId, attrName => $A_RESOURCE_MAILING_LIST_NAME);

	for my $memberId ($data->getMemberIdsForResource(resource => $resourceId)) {
        next unless($data->getMemberAttributeValue(member => $memberId, attrName => $A_USER_STATUS) eq "VALID");

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

        $mailinglistStruc->{$listName}->{$userMail}->{$A_USER_NAME} = $userName;
    }
}


for my $listName (keys %$mailinglistStruc) {
    my $fileName = "$mailinglistsDirectory/$listName";
    open FILE,">$fileName" or die "Cannot open $fileName: $! \n";

    for my $mail (sort keys %{$mailinglistStruc->{$listName}}) {
		print FILE $mail, " ", unidecode($mailinglistStruc->{$listName}->{$mail}->{$A_USER_NAME}), "\n";
    }

    close FILE or die $!;
}

perunServicesInit::finalize;
