Module:Item required for quest

From Little-Known Galaxy Wiki
Jump to navigation Jump to search

This module is used in the {{Item required for quest}} template.

Subpages

local argsUtil = require("Module:ArgsUtil")
local cargoUtil = require("Module:CargoUtil")
local iconListModule = require("Module:Icon list")

local p = {}

function p.main(frame)
    local args = argsUtil.merge(frame.args, frame:getParent().args)
    local itemName = args[1] or mw.title.getCurrentTitle().text
    local itemName2 = args[2]
	
	local whereClause = "missionRequirements.requirements='" .. itemName:gsub("'", "''") .. "'"
    if itemName2 then
        whereClause = whereClause .. " OR missionRequirements.requirements='" .. itemName2:gsub("'", "''") .. "'"
    end
    
    local queryOptions = {
        tables = "Missions, missionNPCs, missionRequirements, missionRequirements=mr2, missionRewards",
        fields = [[
            Missions._pageTitle,
            Missions.name,
            Missions.objective,
            Missions.requiresText,
            GROUP_CONCAT(DISTINCT CONCAT(mr2.requirements, IF(mr2.quantity IS NOT NULL, CONCAT('*', mr2.quantity), ''), '/', COALESCE(mr2.quality, 0)))=requirements,
            GROUP_CONCAT(DISTINCT CONCAT(missionRewards.rewards, IF(missionRewards.quantity IS NOT NULL, CONCAT('*', missionRewards.quantity), '')))=rewards
        ]],
        join = "Missions.missionID=missionNPCs.missionID, Missions.missionID=missionRequirements.missionID, Missions.missionID=mr2.missionID, Missions.missionID=missionRewards.missionID",
        where = whereClause,
        groupBy = "Missions.missionID",
        limit = 100,
        orderBy = ""
    }

    local results = cargoUtil.queryData(queryOptions)

    -- Debugging: Log the raw results
    mw.logObject(results)

    -- Check if results are empty
    if not results or #results == 0 then
        return "No missions require '''" .. itemName .. "''' to complete them."
    end

    -- Build the result table
    local html = mw.html.create('table')
        :addClass('lkg-table tablelarge tdt3 td20wid3 tdt4 td20wid4')
        :tag('tr')
            :tag('th'):wikitext('Mission Name'):done()
            :tag('th'):wikitext('Mission Objective'):done()
            :tag('th'):wikitext('Mission Requirements'):done()
            :tag('th'):wikitext('Mission Rewards'):done()
        :done()

    for _, row in ipairs(results) do
        -- Debugging: Log each row's data to check its structure
        mw.log("Row data:", row)

        -- Retrieve and log specific fields
        local pagename = row["Missions._pageTitle"]
        local questName = row["Missions.name"]
        local objective = row["Missions.objective"]
        local requiresText = row["Missions.requiresText"]
        local requirements = row["requirements"]
        local rewards = row["rewards"]
        mw.log("Page Name:", pagename, "Quest Name:", questName, "Objective:", objective, "Requires Text:", requiresText, "Requirements:", requirements, "Rewards:", rewards)
        
        -- Pass the requirements and rewards to the Icon list module
        local reqList = tostring(iconListModule._main{ requirements, delim = ',' })
        local rewardsList = tostring(iconListModule._main{ rewards, delim = ',' })

        -- Build the table row with retrieved data
        html:tag('tr')
            :tag('td'):wikitext("[[" .. pagename  .. "|" .. (questName or 'N/A') .. "]]"):done()
            :tag('td'):wikitext(objective or 'N/A'):done()
            :tag('td'):wikitext(requiresText or reqList or 'N/A'):done()
            :tag('td'):wikitext(rewardsList or 'N/A'):done()
        :done()
    end

    return tostring(html)
end

return p