#!/usr/bin/perl
use strict;
use warnings;
use perunServicesInit;
use perunServicesUtils;
use File::Basename;

our $SERVICE_NAME = basename($0);
our $PROTOCOL_VERSION = "3.1.1";
my $SCRIPT_VERSION = "3.0.3";

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

#Constants
our $A_UF_LOGIN;                  *A_UF_LOGIN =                \'urn:perun:user_facility:attribute-def:virt:login';
our $A_F_CELL;                    *A_F_CELL =                  \'urn:perun:facility:attribute-def:def:afsCell';
our $A_F_PARTITION;               *A_F_PARTITION =             \'urn:perun:facility:attribute-def:def:afsPartition';
our $A_F_SERVER;                  *A_F_SERVER =                \'urn:perun:facility:attribute-def:def:afsServer';
our $A_R_DEFAULT_QUOTA;           *A_R_DEFAULT_QUOTA =         \'urn:perun:resource:attribute-def:def:afsDefaultUsersQuota';
our $A_R_DEFAULT_USERS_REALM;     *A_R_DEFAULT_USERS_REALM =   \'urn:perun:resource:attribute-def:def:afsDefaultUsersRealm';
our $A_R_USERS_MOUNT_POINT;       *A_R_USERS_MOUNT_POINT =     \'urn:perun:resource:attribute-def:def:afsUsersMountPoint';
our $A_R_USERS_VOLUME;            *A_R_USERS_VOLUME =          \'urn:perun:resource:attribute-def:def:afsUsersVolume';
our $A_R_VOLUME;                  *A_R_VOLUME =                \'urn:perun:resource:attribute-def:def:afsVolume';
our $A_UF_USER_QUOTA;             *A_UF_USER_QUOTA =           \'urn:perun:user_facility:attribute-def:def:afsUserQuota';
our $A_U_ORGANIZATIONSWITHLOA;    *A_U_ORGANIZATIONSWITHLOA =  \'urn:perun:user:attribute-def:virt:organizationsWithLoa:en';

my $service_file_name = "$DIRECTORY/$::SERVICE_NAME";

#####################################

####### output file ######################
open SERVICE_FILE,">$service_file_name" or die "Cannot open $service_file_name: $! \n";

foreach my $resourceId ($data->getResourceIds()) {
	foreach my $memberId ($data->getMemberIdsForResource(resource => $resourceId)) {
		print SERVICE_FILE $data->getFacilityAttributeValue(attrName => $A_F_SERVER) . "\t";
		print SERVICE_FILE $data->getFacilityAttributeValue(attrName => $A_F_CELL) . "\t";
		print SERVICE_FILE $data->getFacilityAttributeValue(attrName => $A_F_PARTITION) . "\t";
		print SERVICE_FILE $data->getResourceAttributeValue(attrName => $A_R_DEFAULT_USERS_REALM, resource => $resourceId) . "\t";
		print SERVICE_FILE ($data->getResourceAttributeValue(attrName => $A_R_USERS_MOUNT_POINT, resource => $resourceId) || '') . "\t";
		print SERVICE_FILE ($data->getResourceAttributeValue(attrName => $A_R_USERS_VOLUME, resource => $resourceId) || '') . "\t";
		print SERVICE_FILE ($data->getResourceAttributeValue(attrName => $A_R_VOLUME, resource => $resourceId) || '') . "\t";
		print SERVICE_FILE $data->getUserFacilityAttributeValue(attrName => $A_UF_LOGIN, member => $memberId) . "\t";

		my $quota = 0;
		my $defaultQuota = $data->getResourceAttributeValue(attrName => $A_R_DEFAULT_QUOTA, resource => $resourceId);
		my $usersQuota = $data->getUserFacilityAttributeValue(attrName => $A_UF_USER_QUOTA, member => $memberId);
		if (defined($defaultQuota)) {
			if (defined($usersQuota)) {
				if (quotaToKb($usersQuota) > quotaToKb($defaultQuota)) {
					$quota = quotaToKb($usersQuota);
				} else {
					$quota = quotaToKb($defaultQuota);
				}
			} else {
				$quota = quotaToKb($defaultQuota);
			}
		}
		print SERVICE_FILE "$quota\t";

		my $organizationsWithLoa = $data->getUserAttributeValue(attrName => $A_U_ORGANIZATIONSWITHLOA, member => $memberId);
		if(defined $organizationsWithLoa->{"University of West Bohemia"}) {
			print SERVICE_FILE "zcu.cz" . "\n";
		} elsif(defined $organizationsWithLoa->{"Charles University in Prague"}) {
			print SERVICE_FILE "ruk.cuni.cz" . "\n";
		} else {
			print SERVICE_FILE $data->getFacilityAttributeValue(attrName => $A_F_CELL) . "\n";
		}
	}
}
close(SERVICE_FILE);
#####################################################
perunServicesInit::finalize;
