#!/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";
my $SCRIPT_VERSION = "3.0.1";

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

#Constants
our $A_UF_UID;                     *A_UF_UID =                       \'urn:perun:user_facility:attribute-def:virt:UID';
our $A_UF_DATA_QUOTAS;             *A_UF_DATA_QUOTAS =               \'urn:perun:user_facility:attribute-def:virt:dataQuotas';
our $A_UF_FILE_QUOTAS;             *A_UF_FILE_QUOTAS =               \'urn:perun:user_facility:attribute-def:virt:fileQuotas';

our %uniqueUID = ();

####### output file #######
my $service_file_name = "$DIRECTORY/$::SERVICE_NAME";
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 ) ) {
		my $uid = $data->getUserFacilityAttributeValue( member => $memberId, attrName => $A_UF_UID );
		my $dataQuotas = $data->getUserFacilityAttributeValue( member => $memberId, attrName => $A_UF_DATA_QUOTAS );
		my $fileQuotas = $data->getUserFacilityAttributeValue( member => $memberId, attrName => $A_UF_FILE_QUOTAS );

		if($uniqueUID{$uid}) {
			#if already added, then continue
			next;
		} else {
			$uniqueUID{$uid} = 1;
		}

		#First go through data quota map and read file quota if exists or set unlimited
		my %uniquePaths = ();
		foreach my $path (keys %{$dataQuotas}) {
			$uniquePaths{$path} = 1;
			my $quota = $dataQuotas->{$path};

			my $softQuota = $quota;
			$softQuota =~ s/:.*$//g;
			my $hardQuota = $quota;
			$hardQuota =~ s/^.*://g;

			print SERVICE_FILE $uid . "\t";
			print SERVICE_FILE quotaToKb $softQuota;
			print SERVICE_FILE "\t";
			print SERVICE_FILE quotaToKb $hardQuota;
			print SERVICE_FILE "\t";

			if($fileQuotas->{$path}) {
				$quota = $fileQuotas->{$path};
				$softQuota = $quota;
				$softQuota =~ s/:.*$//g;
				$hardQuota = $quota;
				$hardQuota =~ s/^.*://g;
				print SERVICE_FILE $softQuota . "\t";
				print SERVICE_FILE $hardQuota . "\t";
			} else {
				print SERVICE_FILE "0\t0\t";
			}

			print SERVICE_FILE $path . "\n";
		}

		#Then go through file quota map and for not used files quota set unlimited data quota
		foreach my $path (keys %{$fileQuotas}) {
			if($uniquePaths{$path}) {
				next;
			}

			print SERVICE_FILE $uid . "\t";
			print SERVICE_FILE "0\t0\t";

			my $quota = $fileQuotas->{$path};
      my $softQuota = $quota;
      $softQuota =~ s/:.*$//g;
      my $hardQuota = $quota;
      $hardQuota =~ s/^.*://g;
      print SERVICE_FILE $softQuota . "\t";
      print SERVICE_FILE $hardQuota . "\t";
			print SERVICE_FILE $path . "\n";
		}
	}
}

close(SERVICE_FILE);

#####################################################
perunServicesInit::finalize;
