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

our $SERVICE_NAME = basename($0);
our $PROTOCOL_VERSION = "3.0.0";
our $SCRIPT_VERSION = "3.0.1";

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

#Constants
our $A_R_PROJECTS_BASE_PATH;   *A_R_PROJECTS_BASE_PATH   = \'urn:perun:resource:attribute-def:def:projectsBasePath';
our $A_GR_PROJECT_NAME;        *A_GR_PROJECT_NAME        = \'urn:perun:group_resource:attribute-def:def:projectName';
our $A_GR_PROJECT_DIR_PERMS;   *A_GR_PROJECT_DIR_PERMS   = \'urn:perun:group_resource:attribute-def:def:projectDirPermissions';
our $A_GR_PROJECT_OWNER_LOGIN; *A_GR_PROJECT_OWNER_LOGIN = \'urn:perun:group_resource:attribute-def:def:projectOwnerLogin';
our $A_V_GR_UNIX_GROUP_NAME;   *A_V_GR_UNIX_GROUP_NAME   = \'urn:perun:group_resource:attribute-def:virt:unixGroupName';
our $A_V_GR_GID;               *A_V_GR_GID               = \'urn:perun:group_resource:attribute-def:virt:unixGID';
our $A_GR_SOFT_QUOTA_DATA;     *A_GR_SOFT_QUOTA_DATA     = \'urn:perun:group_resource:attribute-def:def:projectDataQuota';
our $A_GR_HARD_QUOTA_DATA;     *A_GR_HARD_QUOTA_DATA     = \'urn:perun:group_resource:attribute-def:def:projectDataLimit';
our $A_F_QUOTA_ENABLED;        *A_F_QUOTA_ENABLED        = \'urn:perun:facility:attribute-def:def:quotaEnabled';

our $PROJECT_FILE_QUOTA; *PROJECT_FILE_QUOTA = \'0';
our $PROJECT_FILE_LIMIT;  *PROJECT_FILE_LIMIT = \'0';

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

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

my $quotaEnabled = $data->getFacilityAttributeValue( attrName => $A_F_QUOTA_ENABLED );

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

	my $projectBasePath = $data->getResourceAttributeValue( resource => $resourceId, attrName => $A_R_PROJECTS_BASE_PATH );

	foreach my $groupId ( $data->getGroupIdsForResource( resource => $resourceId ) ) {
		my $projectName = $data->getGroupResourceAttributeValue( group => $groupId, resource => $resourceId, attrName => $A_GR_PROJECT_NAME );
		my $unixGroupName = $data->getGroupResourceAttributeValue( group => $groupId, resource => $resourceId, attrName => $A_V_GR_UNIX_GROUP_NAME );

		if( !defined($projectName) ) { next; }
		if( !defined($unixGroupName) ) { next; }

		my $projectDirPerms = $data->getGroupResourceAttributeValue( group => $groupId, resource => $resourceId, attrName => $A_GR_PROJECT_DIR_PERMS );
		my $projectOwnerLogin = $data->getGroupResourceAttributeValue( group => $groupId, resource => $resourceId, attrName => $A_GR_PROJECT_OWNER_LOGIN );
		my $unixGID = $data->getGroupResourceAttributeValue( group => $groupId, resource => $resourceId, attrName => $A_V_GR_GID );
		my $softDataQuota = $data->getGroupResourceAttributeValue( group => $groupId, resource => $resourceId, attrName => $A_GR_SOFT_QUOTA_DATA );
		my $hardDataQuota = $data->getGroupResourceAttributeValue( group => $groupId, resource => $resourceId, attrName => $A_GR_HARD_QUOTA_DATA );

		# Print attributes
		print SERVICE_FILE $projectBasePath . "\t";
		print SERVICE_FILE $projectName . "\t";
		print SERVICE_FILE defined($projectDirPerms) ? $projectDirPerms . "\t" : "750\t";
		print SERVICE_FILE defined($projectOwnerLogin) ? $projectOwnerLogin . "\t" : "nobody\t";
		print SERVICE_FILE $unixGroupName . "\t";
		print SERVICE_FILE $unixGID . "\t";
		print SERVICE_FILE quotaToKb($softDataQuota) . "\t";
		print SERVICE_FILE quotaToKb($hardDataQuota) . "\t";
		print SERVICE_FILE $PROJECT_FILE_QUOTA . "\t";
		print SERVICE_FILE $PROJECT_FILE_LIMIT . "\t";
		print SERVICE_FILE defined($quotaEnabled) ? $quotaEnabled . "\n" : "0\n";
	}
}
close(SERVICE_FILE);
#####################################################
perunServicesInit::finalize;
