Module:ElementAchievementHeader

Revision as of 01:08, 7 May 2025 by MarkWD (talk | contribs) (// via Wikitext Extension for VSCode)

Documentation for this module may be created at Module:ElementAchievementHeader/doc

--[[ 
 * Module:ElementAchievementHeader
 * Renders the achievement header for person templates
 * Displays title achievements with special styling
 * 
 * Integrates with Blueprint template system.
 ]]

local p = {}

p.elementName = "achievementHeader"

-- Load required modules
local ErrorHandling = require('Module:ErrorHandling')
local Achievements = require('Module:AchievementSystem')

-- Default configuration
p.defaultConfig = {
    headerClass = "achievement-header"
}

-- Create block function
function p.createBlock()
    return function(template, args)
        -- Protected execution wrapper
        local function execute()
            local frame = mw.getCurrentFrame()
            
            -- Get the current page ID
            local pageId = mw.title.getCurrentTitle().id
            if not pageId then
                -- Include debug comment when no page ID available
                return "<!-- Achievement Header: No page ID available -->"
            end
            
            -- Use getTitleAchievement function that specifically checks for type="title"
            -- IMPORTANT: The function returns achievementId, displayName, achievementId
            -- We need to directly use these return values correctly
            local achievementId, displayName, achievementId2 = Achievements.getTitleAchievement(pageId, frame)
            
            -- Include more comprehensive debug information
            local pageName = mw.title.getCurrentTitle().fullText or "[Unknown]"
            
            -- Get user achievements directly for debugging
            local userAchievements = {}
            pcall(function() userAchievements = Achievements.getUserAchievements(pageId) or {} end)
            local achievementCount = #userAchievements
            
            -- Format the debug output with more details
            local debugInfo = string.format(
                "<!-- Achievement Debug: Page='%s', ID='%s', Found=%d achievements, "..
                "Title Data: ID='%s', Name='%s', ID2='%s' -->",
                pageName,
                pageId or "nil",
                achievementCount,
                achievementId or "nil", 
                displayName or "nil",
                achievementId2 or "nil"
            )
            
            -- Always create a row for debugging purposes
            if achievementId ~= "" and displayName ~= "" and achievementId2 ~= "" then
                -- Achievement found - create populated row with achievement data
                return string.format(
                    '|-\n! colspan="2" class="achievement-header %s" data-achievement-id="%s" data-achievement-name="%s" | %s%s',
                    achievementId, achievementId, displayName, displayName, debugInfo
                )
            else
                -- No achievement found - create phantom row with visible debug info
                return string.format(
                    '|-\n! colspan="2" class="achievement-header-phantom" | No Achievement Found %s',
                    debugInfo
                )
            end
        end
        
        -- Wrap with error handling
        if template._errorContext then
            return ErrorHandling.protect(
                template._errorContext,
                "ElementBlock_achievementHeader",
                execute,
                ""
            )
        else
            local ok, result = pcall(execute)
            return ok and result or "<!-- Achievement Header: Protected execution failed -->"
        end
    end
end

return p