#!/usr/bin/perl

######################################
# Generates owners of a mailing list #
######################################

use strict;
use warnings;
use perunServicesInit;
use perunServicesUtils;
use Text::Unidecode;
use POSIX qw/strftime/; 

local $::SERVICE_NAME = "mailman_owners";
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_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';
our $A_RESOURCE_MAILING_LIST_VARIANTS;   *A_RESOURCE_MAILING_LIST_VARIANTS =  \'urn:perun:resource:attribute-def:def:mailingListUsesLangVariants'; # true for -cs and -en variants

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

foreach my $resourceId ($data->getResourceIds()) {

	my $listVariantsAttribute = $data->getResourceAttributeValue(resource => $resourceId, attrName => $A_RESOURCE_MAILING_LIST_VARIANTS);
	my $useLangVariants = (defined($listVariantsAttribute) && ($listVariantsAttribute eq "true") );

	my $listNameAttribute = $data->getResourceAttributeValue(resource => $resourceId, attrName => $A_RESOURCE_MAILING_LIST_NAME);
	my $listName = "$listNameAttribute";
	my $fileName = "$mailinglistsDirectory/$listName";
	if($useLangVariants) {
		# uses separate lists for czech and English
		my $fileNameCs = "$fileName-cs";
		my $fileNameEn = "$fileName-en";
		open FILECS,">$fileNameCs" or die "Cannot open $fileNameCs: $! \n";
		open FILEEN,">$fileNameEn" or die "Cannot open $fileNameEn: $! \n";
	} else {
		# just one list
		open FILE,">$fileName" or die "Cannot open $fileName: $! \n";
	}

	foreach my $memberId ($data->getMemberIdsForResource(resource => $resourceId)) {
		#list only VALID owners
		my $memberStatus = $data->getMemberAttributeValue(member => $memberId, attrName => $A_USER_STATUS);
		my $userMailAttribute = $data->getUserAttributeValue(member => $memberId, attrName => $A_USER_MAIL);

		next unless($memberStatus eq "VALID");

		if($useLangVariants) {
			print FILECS "", $userMailAttribute, "\n";
			print FILEEN "", $userMailAttribute, "\n";
		} else {
			print FILE "", $userMailAttribute, "\n";
		}
	}

	if($useLangVariants) {
		close FILECS or die $!;
		close FILEEN or die $!;
	} else {
		close FILE or die $!;
	}
}

perunServicesInit::finalize;
