local p = {}
local getArgs = require('Module:Arguments').getArgs
local yn = require('Module:Yesno')
local cfg = mw.loadData('Module:If preview/configuration')

function p.main(frame)
	local args = getArgs(frame)
	if cfg.preview then
		return args[1] or ''
	else
		return args[2] or ''
	end
end

function p.pmain(frame)
	return p.main(frame:getParent())
end

local function warning_text(warning)
	return mw.ustring.format(
		cfg.warning_infrastructure,
		cfg.templatestyles,
		warning
	)
end

function p._warning(args)
	local warning = args[1] and args[1]:match('^%s*(.-)%s*$') or ''
	if warning == '' then
		return warning_text(cfg.missing_warning)
	end
	if not cfg.preview then return '' end
	if yn(args['consolewarning']) then
		mw.addWarning(args[1] or cfg.missing_warning)
	end
	return warning_text(warning)
end

function p.pwarning(frame)
	local args = getArgs(frame)
	return p._warning(args)
end

function p.warn(text)
	if text == nil or text == '' then return '' end
	mw.addWarning(text)
	return p._warning({text})
end

function p.consoleWarning(frame)
	local args = getArgs(frame)
	mw.addWarning(args[1] or cfg.missing_warning)
	return ''
end

return p