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

--[[
main

Esta função retorna o primeiro argumento ou o segundo argumento passado para
este módulo, dependendo se a página estiver sendo pré-visualizada.

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

--[[
pmain

Esta função retorna o primeiro argumento ou o segundo argumento passado para a parental deste módulo (ou seja, a predefinição usando este módulo), dependendo se
estiver sendo pré-visualizada.

]]
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

--[[
Aviso

Esta função retorna um "aviso de pré-visualização", que é o primeiro argumento marcado
com 'HTML' e algum texto de suporte, dependendo se a página estiver sendo pré-visualizada.

]]
-- function p.warning(frame)
-- 	mw.addWarning(frame.args[1] or cfg.missing_warning)
-- 	return p._warning(frame.args)
-- end

--[[
Aviso, mas para predefinições de passagem como a {{Preview warning}}
]]
function p.pwarning(frame)
	local args = getArgs(frame)
	return p._warning(args)
end

--[[
Tanto 'mw.addWarning' quanto 'preview warning'
]]

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

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

return p