require('strict')
local p = {}
local data = mw.loadData('Module:Badge display/data')
local getArgs = require('Module:Arguments').getArgs
local GlobalTemplateArgs = '' -- define as global (to this module) variable


function p.DisplayImage(frame)
    -- Usage from a template etc:
    -- {{#invoke:BadgeDisplay|DisplayImage
    -- | image = NameOfImage.jpg
    -- | caption = Caption for the image
    -- | description = Description of the image
    -- | float = left/right/center
    -- | width = width in pixels or other units of the table
    -- | size = size in pixels or other units, e.g. "x25px"
    -- }}

    local args = getArgs(frame)

    -- Set default values for optional parameters
    local float = args.float or 'none'
    if float == "left" then 
        float = "floatleft"
    else
        if float == "right" then
            float = "floatright"
        end
    end
    if float == "none" then float = '' end
    
    local size = args.size or 'x200px'
    local width = args.width or ''
    local code =''
    code = args[1] or '' -- Taking a risk. Set code to first unnamed param but then overwriting it if code is named
    if string.len(code) < 2 then 
        code =  args.code
    end
    if not code or '' == code then
		-- return '<span style="color:#d33">Error: missing positional parameter 1</span>'
		return '<span style="color:#d33"> (Invalid Code: <b>' .. code .. '</b> )</span> [[Category:BadgeDisplay Error]]'
	end
    
--	local code = code:upper() -- DO NOT DO THIS. Code is case sensitive -- Converts the first argument to uppercase
	if not data[code] then
		-- return '<span style="color:#d33">Error: invalid positional parameter 1: ' .. code .. '</span>'
		return '<span style="color:#d33"> (Code not found: <b>' .. code .. '</b> )</span> [[Category:BadgeDisplay Error]]'
	end

    -- {Code = "xx", Type = "", Description = "xx", Class="", Variation="", Image="XX", PageLink="XX",  Country="ZAR", Note="", Org="SANDF", RecipCat="" }
    -- Data from the record into local variables
    local Code = data[code].Code
    local Type = data[code].Type
    local Description = data[code].Description
    local Class = data[code].Class
    local Variation = data[code].Variation
    local Image = data[code].Image
    local PageLink = data[code].PageLink
    local Country = data[code].Country
    local Note = data[code].Note
    local Org = data[code].Org
    local caption = ''
    
   if string.len(Image) < 1 then
    Image="Ribbon - Question mark.png"
   end
    local NoTable = args.NoTable or ''
    if string.len(NoTable) > 0 then -- Do not output a table, just the badge
        local output = ''
        output = output .. "[[File:" .. Image .. "|".. size .. "|" .. Description .. "|link=" .. PageLink .. "]]"
        return output -- This will exit the function and stop processing further
    end

    local DescOnly = args.DescOnly or ''
    if string.len(DescOnly) > 0 then -- Do not output a table, just the badge with a description
        if DescOnly ~= "yes" then -- Hidden option to over-ride the description
            Description=DescOnly
        end
        local output = ''
        output = output .. "[[File:" .. Image .. "|".. size .. "|" .. Description .. "|link=" .. PageLink .. "]]"
        output = output .. " [[" .. PageLink .. "|" .. Description .. "]]"
        return output -- This will exit the function and stop processing further
    end

        -- Build the wikitext table
        local wikitext=''
        wikitext = wikitext .. '{| class="wikitable ' .. float .. '" style="width:250px; margin:0 auto;border:none;"\n'
        caption= "[[" .. PageLink .. "|" .. Description .. "]]"
        if string.len(Type) > 1 then
            caption = caption .. "<br />(" .. Type .. ")"
        end
        wikitext = wikitext .. '|+ ' .. caption ..'\n|-\n'
        wikitext = wikitext .. '|style="text-align:center;border:none;"| [[File:' .. Image .. '|' .. size .. '|link=' .. PageLink .. ']]\n|-\n'
        wikitext = wikitext .. '|style="text-align:center;"|' -- .. Description 
        if string.len(Class) > 1 then 
            wikitext = wikitext  .. Class .. " <br />"
        end
        if string.len(Variation) > 1 then
            wikitext = wikitext  .. Variation .. " <br />"
        end
        if string.len(Note) > 1 then
            wikitext = wikitext ..  "<i>" .. Note .. "</i>"
        end
        wikitext = wikitext .. '\n|-\n'
        wikitext = wikitext .. '|}\n'
        return wikitext
end
function p.BadgeTable(frame)
	
	local output = ''
	local templateArgs = getArgs(frame)
	local localfloat = templateArgs["float"] or ''
	if not localfloat then
		localfloat = "left"  -- NOTE TODO: Make the table float according to the value of locafloat ;-)
	end
	local tableCode = '{| class="wikitable sortable" \n'
	tableCode = tableCode .. "|+ List of Badges Available \n" -- Caption
	tableCode = tableCode .. "|-\n"
    -- xx = {Code = "xx", Type = "", Description = "xx", Class="", Variation="", Image="XX", PageLink="XX",  Country="ZAR", Note="", Org="SANDF", RecipCat="" },    
	tableCode = tableCode .. "! Code !! Type !! Description !! Class !! Variation !! Image !! Note !! Country\n"
	-- Iterate through the data in the table "GunnerData"
	for code, record in pairs(data) do
		-- Generate wiki table code for the Badges
		tableCode = tableCode .. "|-\n"
		tableCode = tableCode .. "|" ..code .. "\n"
		-- tableCode = tableCode .. "| " .. record.Code .. "\n"
		tableCode = tableCode .. "| " .. record.Type .. "\n"
		if string.len(record.PageLink) < 1 then
			tableCode = tableCode .. "| " .. record.Description 
		else
			tableCode = tableCode .. "| " .. "[[" .. record.PageLink .. "|" .. record.Description .. "]]"
		end
		tableCode = tableCode .. "\n"
		tableCode = tableCode .. "| " .. record.Class .. "\n"
		tableCode = tableCode .. "| " .. record.Variation .. "\n"
        tableCode = tableCode .. "| [[File:" .. record.Image .. "|80px]]\n"
		tableCode = tableCode .. '| style=\"text-align: left;\"|' .. record.Note .. "\n"
        tableCode = tableCode .. "| " .. record.Country .. "\n"
		
	end
	tableCode = tableCode .. "|}" -- End the table
	return tableCode
end

return p
-- Initial Code by John Dovey (19 April 2023) [[User:BoonDock]]