--[[
--This is an example of cli_filter.lua script for Slurm
--More information about Slurm cli_filter:
-- https://slurm.schedmd.com/cli_filter_plugins.html
--To find names of options, take a look at:
-- src/common/slurm_opt.c
--]]

function _find_in_str(str, arg)
        if str ~= nil then
                local place = string.find(str,arg)
		if place == 1
		then
			return true
		else
			return false
		end
        else
                return false
        end
end

function slurm_cli_pre_submit(options, pack_offset)

	--[[
	-- Checks done in cli_filter can be worked around by users switching to different
	-- SLURM_CONF or using their own build of tools where call to cli_filter was removed.
	--
	-- If strict policy enforcement is a requirement than job_submit plugin should be used.
	--]]

	--[[ Dump environment in JSON format ]]--
	env_json = slurm.json_env()
	slurm.log_verbose("slurm_cli_pre_submit: Running with following environment variables:%s", env_json);

	--[[ Dump options set when running (slurmctld default behavior is not shown here) ]]--
	opt_json = slurm.json_cli_options(options)
	slurm.log_verbose("slurm_cli_pre_submit: Running with following options set:%s", opt_json)

	--[[ Store a variable for potential use in slurm_cli_post_submit ]]--
	slurm.cli_store(0,options["type"])


	if options["type"] == "srun"
	then
		if options["uid"] == "0" --[[or options["uid"] == SpecialUser]]--
		then
			slurm.log_info("srun allowed for uid: %s", options["uid"])
		else
			local time_limit_in_minutes = slurm.time_str2mins(options["time"])
			if options["pty"] == "set" and time_limit_in_minutes > (4 * 60)
			then
				slurm.log_error("Use of srun with --pty is forbidden for uid: %s for time longer than 4h", options["uid"])
				return slurm.ERROR
			end
		end
	end

	if options["type"] == "sbatch" and options["wrap"] ~= nil
	then
		slurm.log_error("--wrap option is forbidden");
		return slurm.ERROR
	end

	local script_location = {}
	script_location[1] = "/opt/supported_scripts"
	script_location[2] = "/opt/supported_scripts2"

	local allowed = false
	for idx,location in ipairs(script_location)
	do
		if _find_in_str(options.argv[1], location)
		then
			allowed = true
			break
		end

	end

	if allowed == false
	then
		slurm.log_error("You have to use scripts from one of:")
		for idx, location in ipairs(script_location)
		do
			slurm.log_error("- %s", location)
		end
		return slurm.ERROR
	end

	return slurm.SUCCESS

end

function slurm_cli_setup_defaults(options, early_pass)

	--[[
	-- Make --hint=nomultithread a default behavior
	-- if user specifies other --hint=XX option then
	-- it will override the setting done here
	--]]--
	options['hint'] = 'nomultithread'

        return slurm.SUCCESS
end

function slurm_cli_post_submit(offset, job_id, step_id)
	saved_type = slurm.cli_retrieve(0);
	slurm.log_info("Submitted: %d.%d component: %d using: %s", job_id, step_id, offset, saved_type);
        return slurm.SUCCESS
end
