Module:Equipment
Documentation for this module may be created at Module:Equipment/doc
-- <pre>Sandbox for testing stuff. Infoked by [[User:Joeytje50/Module]]
-- Current module being tested: Module:Equipment
local p = {}
local hasc = require('Module:Paramtest').has_content
local itemstats = require('Module:FetchItemStats')
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local GEPrice = require('Module:Exchange')._price
-- Parse item string and check if GIF icons are allowed
local function parseItem(ret, itemString, equipSlot, stats, quantity, clickable)
    local itemString = itemString
    local allowGif = false -- Set default to not allow GIF icons
    local itemName = ""
    -- Look for a ;g at the end of the string and separate them
    if hasc(itemString) then
        allowGif = itemString:sub(-2) == ";g"
        if allowGif then
            itemName = itemString:sub(0, -3)
        else
            itemName = itemString or ""
        end
    end
    
    return ret, itemName, allowGif, equipSlot, stats, quantity, clickable
end
-- Formats a <div> element for items
local function makeDiv(ret, itemName, allowGif, equipSlot, stats, quantity, clickable)
    local itemName = itemName
    local allowGif = allowGif
    local topDivClass = "equipment-" .. equipSlot
    local names = mw.text.split(itemName, ";")
    if #names <= 1 or names[2] == 'g' then
        names[2] = itemstats.defaultVersion(names[1]) or names[1]
    end
    local imgType = allowGif == true and "gif" or "png"
    local equipSlotText = ""
    
    -- Check if the item name is not empty
    if itemName ~= '' then
        if clickable then
            -- Construct a clickable link
            equipSlotText = string.format("[[File:%s.%s|%s|link=%s.%s]]", names[1], imgType, names[2])
        else
            -- Construct a plain image without a link
            equipSlotText = string.format("[[File:%s.%s|%s]]", names[1], imgType, names[2])
        end
    end
    -- Create the divs
    local topDiv = ret
        :tag("div")
        :addClass(topDivClass)
    local nestedDiv = topDiv
        :tag("div")
        :addClass("equipment-plinkp")
        :wikitext(equipSlotText)
    if quantity then
        local amt, quantclass = formatAmount(quantity)
        nestedDiv:tag('span')
            :addClass('inv-quantity-text')
            :addClass(quantclass)
            :wikitext(amt)
    end
    if stats and itemName ~= '' then
        -- Add stat-related code here if needed
    end
    if itemName ~= '' then
        topDiv:addClass("equipment-blank")
    end
end
function p.main(frame)
    local args = frame:getParent().args
    local buttons = yesno(args.buttons, false)
    local stats = yesno(args.stats, false)
    local align
    if args.align == "right" then
        align = "equipment-right"
    elseif args.align == "center" then
        align = "equipment-center"
    else
        align = "equipment-left"
    end
    -- general 'equipment' class for the whole thing
    align = "equipment " .. align
    local tbl = mw.html.create("table"):addClass(align):tag("tr")
    local ret = tbl:tag("td"):tag("div")
    if stats then
        stats = {
            astab = 0,
            aslash = 0,
            acrush = 0,
            amagic = 0,
            arange = 0,
            dstab = 0,
            dslash = 0,
            dcrush = 0,
            dmagic = 0,
            drange = 0,
            str = 0,
            rstr = 0,
            mdmg = 0,
            prayer = 0,
            weight = 0,
            ikods = {},
        }
    end
    if buttons then
        ret:addClass("equipment-div-buttons")
    else
        ret:addClass("equipment-div")
    end
    -- Fetch equipment and create divs
    makeDiv(parseItem(ret, args.head, "head", stats, nil, not yesno(args.headClickable, true)))
    makeDiv(parseItem(ret, args.cape, "cape", stats, nil, not yesno(args.capeClickable, true)))
    makeDiv(parseItem(ret, args.neck, "neck", stats, nil, not yesno(args.neckClickable, true)))
    makeDiv(parseItem(ret, args.ammo, "ammo", stats, args.ammoquantity, not yesno(args.ammoClickable, true)))
    makeDiv(parseItem(ret, args.weapon, "weapon", stats, args.weaponquantity, not yesno(args.weaponClickable, true)))
    makeDiv(parseItem(ret, args.torso, "torso", stats, nil, not yesno(args.torsoClickable, true)))
    makeDiv(parseItem(ret, args.shield, "shield", stats, nil, not yesno(args.shieldClickable, true)))
    makeDiv(parseItem(ret, args.legs, "legs", stats, nil, not yesno(args.legsClickable, true)))
    makeDiv(parseItem(ret, args.gloves, "gloves", stats, nil, not yesno(args.glovesClickable, true)))
    makeDiv(parseItem(ret, args.hands, "gloves", stats, nil, not yesno(args.handsClickable, true)))
    makeDiv(parseItem(ret, args.boots, "boots", stats, nil, not yesno(args.bootsClickable, true)))
    makeDiv(parseItem(ret, args.ring, "ring", stats, nil, not yesno(args.ringClickable, true)))
    
    if stats then
        -- Add stat-related code here if needed
    end
    return tbl:done()
end
return p