require('strict')
local p = {}

p.main = function(frame)
	local args = frame:getParent().args
	local yesno = require('Module:Yesno')
	local current_title = mw.title.getCurrentTitle()
	local pagetype = require('Module:Pagetype')._main{page = current_title.prefixedText, defaultns = "extended"}

	if pagetype=='user page' or args.category=='no' then -- bot does not run on user talk namespace
		return ''
	end

	local templates = mw.loadData('Module:WikiProject banner/config').banner_shell.redirects
	local getparam = function(p)
		local TPVmodule = require('Module:Template parameter value').getParameter
		local success, param = TPVmodule(current_title.fullText, templates, p, {ignore_subtemplates=true, ignore_blank=true})
		return success and param or nil
	end
	local check = function(p_table)
		local conflict = false
		local resolved
		for _, p in pairs(p_table) do
			local yn = yesno(p)
			-- check if "other" or "activepol" are set
			if p=='activepol' then
				yn = true -- activepol are living
			elseif p=='other' then
				yn = false -- other is treated as non-living
			end
			if yn==true or yn==false then -- parameter is set
				if resolved==nil then -- no resolved status yet
					resolved = yn -- resolve to parameter
				elseif yn~=resolved then -- resolved differs from parameter
					conflict = true
				end
			end
		end
		return resolved, conflict
	end
	local conflict, shell_resolved, bio_resolved, resolved
	shell_resolved, conflict = check({getparam('blp'), getparam('living')})
	if not conflict then
		bio_resolved, conflict = check({args.blp, args.living, args.BLP})
		if not conflict then
			resolved, conflict = check({shell_resolved, bio_resolved})
		end
	end
	local out
	if conflict then
		out = 'Pages with conflicting living parameter'
	elseif shell_resolved==nil then
		if bio_resolved==nil then
			if pagetype=='article' then
				out = 'Biography articles without living parameter'
			end
		else
			out = 'Pages using WikiProject Biography which need living parameter transferring'
		end
	elseif shell_resolved==bio_resolved then
		out = 'Pages with redundant living parameter'
	end
	return out and '[[Category:' .. out .. ']]' or ''
end

return p