#!/bin/sh
#
#Fake sacctmgr show assoc results for testing

#Order of fields is
#format=account,description,organization
# list account format=account,description,organization --parsable2 --noheader --readonly

verbose_flag=

print_header()
{
	echo "Account|Cluster|Def QOS|Share|GrpCPUMins|GrpCPUs|GrpJobs|GrpNodes|GrpSubmit|GrpWall|ID|LFT|MaxCPUMins|MaxCPUs|MaxJobs|MaxNodes|MaxSubmit|MaxWall|Par ID|ParName|Partition|QOS|RGT|User"
}

print_assoc()
{	
	#Clear values
	tmp_acct=
	tmp_clus=
	tmp_defqos=
	tmp_share=
	tmp_gcpumins=
	tmp_gcpus=
	tmp_gjobs=
	tmp_gnodes=
	tmp_gsub=
	tmp_gwall=
	tmp_id=
	tmp_lft=
	tmp_mcpumins=
	tmp_mcpus=
	tmp_mjobs=
	tmp_mnodes=
	tmp_msub=
	tmp_mwall=
	tmp_pid=
	tmp_parent=
	tmp_part=
	tmp_qos=
	tmp_rgt=
	tmp_user=

	#Set values
	while [ $# -gt 0 ]
	do
		key=$1
		val=$1
		shift
		key=`echo $key | sed -e 's/=.*$//'`
		val=`echo $val | sed -e 's/^.*=//'`
		#echo >&2 "$key = $val"

		case $key in
		    account)
			tmp_acct=$val
			;;
		    cluster)
			tmp_clus=$val
			;;
		    defqos)
			tmp_defqos=$val
			;;
		    fairshare)
			tmp_share=$val
			;;
		    grpcpumins)
			tmp_gcpumins=$val
			;;
		    grpcpus)
			tmp_gcpus=$val
			;;
		    grpjobs)
			tmp_gjobs=$val
			;;
		    grpnodes)
			tmp_gnodes=$val
			;;
		    grpsubmitjobs)
			tmp_gsub=$val
			;;
		    grpwall)
			tmp_gwall=$val
			;;
		    id)
			tmp_id=$val
			;;
		    lft)
			tmp_lft=$val
			;;
		    maxcpumins)
			tmp_mcpumins=$val
			;;
		    maxcpus)
			tmp_mcpus=$val
			;;
		    maxjobs)
			tmp_mjobs=$val
			;;
		    maxnodes)
			tmp_mnodes=$val
			;;
		    maxsubmitjobs)
			tmp_msub=$val
			;;
		    maxwall)
			tmp_mwall=$val
			;;
		    parentid)
			tmp_pid=$val
			;;
		    parentname)
			tmp_parent=$val
			;;
		    partition)
			tmp_part=$val
			;;
		    qos)
			tmp_qos=$val
			;;
		    rgt)
			tmp_rgt=$val
			;;
		    user)
			tmp_user=$val
			;;
		    *)
			echo >&2 "Unrecognized parm $key, aborting"
			exit 1
			;;
		esac
	done
		    
	echo "$tmp_acct|$tmp_clus|$tmp_defqos|$tmp_share|$tmp_gcpumins|$tmp_gcpus|$tmp_gjobs|$tmp_gnodes|$tmp_gsub|$tmp_gwall|$tmp_id|$tmp_lft|$tmp_mcpumins|$tmp_mcpus|$tmp_mjobs|$tmp_mnodes|$tmp_msub|$tmp_mwall|$tmp_pid|$tmp_parent|$tmp_part|$tmp_qos|$tmp_rgt|$tmp_user|"

}

print_assoc_1()
{	print_assoc id=1 parentid=0 account=root \
		cluster=yottascale fairshare=1 \
		lft=101000 rgt=101999 \
		defqos=normal partition=gpus
}

print_assoc_2()
{	print_assoc id=2 account=root user=root \
		parentid=1 parentname=root \
		cluster=yottascale fairshare=1 \
		lft=102000 rgt=102999 \
		defqos=normal partition=gpus
}

print_assoc_3()
{	print_assoc id=3 account=abc124 \
		parentid=1 parentname=root \
		maxcpumins=60000  maxcpus=100  maxjobs=1000  \
		maxnodes=5   maxsubmitjobs=2000  maxwall=4000 \
		grpcpumins=90000  grpcpus=150  grpjobs=1500 \
		grpnodes=7  grpsubmitjobs=3000  grpwall=6000 \
		qos=high,normal \
		cluster=yottascale fairshare=1 \
		lft=103000 rgt=103999 \
		defqos=normal partition=gpus
}

print_assoc_4()
{	print_assoc id=4 account=abc124 user=payerle \
		parentid=3 parentname=abc124 \
		maxcpumins=40000 \
		cluster=yottascale fairshare=1 \
		lft=104000 rgt=104999 \
		defqos=normal partition=gpus
}

print_specified_assoc()
{	aid=$1

	case $aid in
	   1)
		print_assoc_1
		;;
	   2)
		print_assoc_2
		;;
	   3)
		print_assoc_3
		;;
	   4)
		print_assoc_4
		;;
	   *)
		x=x
		#echo >&2 "Unknown assoc $usr"
		;;
	esac
}

print_assocs()
{	#We always have --noheader
	if [ "x$verbose_flag" = "xyes" ]; then
		print_header
	fi
	while [ $# -gt 0 ]
	do
		aid=$1
		shift
		print_specified_assoc $aid
	done
}

print_all_assocs()
{	#Must do alphabetically
	print_assocs 1 2 3 4
}


print_root_acct_assocs()
{	#Print all assocs with account=root
	print_assocs 1 2
}

print_abc124_assocs()
{	#Print all assocs with account=abc124
	print_assocs 3 4
}

print_root_user_assocs()
{	#Print all assocs with user=root
	print_assocs  2
}

print_payerle_assocs()
{	#Print all assocs with user=payerle
	print_assocs  4
}

print_root_root_assocs()
{	#Print all assocs with account=root, user=root
	print_root_user_assocs
}

print_abc124_payerle_assocs()
{	#Print all assocs with account=abc124, user=payerle
	print_payerle_assocs
}

print_no_assocs()
{	print_assocs 'no-such-assoc'
}

#Parse options
acct_flag=
user_flag=

while [ $# -gt 0 ]
do
	arg=$1
	shift

	case $arg in
	    account=* )
		tmp=`echo $arg | sed -e 's/^account=//' -e "s/'//g" -e 's/"//g' `
		acct_flag=$tmp
		;;
	    user=* )
		tmp=`echo $arg | sed -e 's/^user=//' -e "s/'//g" -e 's/"//g' `
		user_flag=$tmp
		;;
	    -v|--verbose)
		verbose_flag=yes
		;;
	esac
done

if [ "x${acct_flag}" != "x" ]; then
	#account requested, possibly with user
	if [ "x${user_flag}" = "x" ]; then
		if [ "x${acct_flag}" = "xroot" ]; then
			print_root_acct_assocs
		elif [ "x${acct_flag}" = "xabc124" ]; then
			print_abc124_assocs
		else
			print_no_assocs
		fi
	elif [ "x${user_flag}" = "xroot" ]; then
		if [ "x${acct_flag}" = "xroot" ]; then
			print_root_root_assocs
		else
			print_no_assocs
		fi
	elif [ "x${user_flag}" = "xpayerle" ]; then
		if [ "x${acct_flag}" = "xabc124" ]; then
			print_abc124_payerle_assocs
		else
			print_no_assocs
		fi
		
	fi
elif [ "x${user_flag}" = "xroot" ]; then
	print_root_user_assocs
elif [ "x${user_flag}" = "xpayerle" ]; then
	print_payerle_assocs
elif [ "x${user_flag}" != "x" ]; then
	print_no_assocs
else
	#No flags, print all accounts
	print_all_assocs
fi


