Aller au contenu

Module:Episode

De Heroes Wiki
local data = require("Module:Episode/data")
local p = {}

-- Function 1: Get full episode link from key
function p.getEpisode(frame)
    local key = string.lower(frame.args[1] or "")
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local ns, link, _, title = unpack(entry)

    -- If namespace is empty or nil, omit it
    if ns == "" or ns == nil then
        return string.format("[[%s|%s]]", link, title)
    else
        return string.format("[[%s:%s|%s]]", ns, link, title)
    end
end

-- Function 1b: Get full episode link from key with chapter
function p.getEpisodeChapter(frame)
    local key = string.lower(frame.args[1] or "")
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local ns, link, chapter, title = unpack(entry)

    -- If namespace is empty or nil, omit it
    if ns == "" or ns == nil then
        return string.format("[[%s|%s : %s]]", link, chapter, title)
    else
        return string.format("[[%s:%s|%s : %s]]", ns, link, chapter, title)
    end
end

-- Function 2: Force namespace to "Credits:"
function p.getCreditsLink(frame)
    local key = string.lower(frame.args[1] or "")
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local _, link, _,title = unpack(entry)  -- We ignore original namespace
    return string.format("[[Crédits:%s|%s]]", link, title)
end

-- Function 3: Force namespace to "Transcript:"
function p.getTranscriptLink(frame)
    local key = string.lower(frame.args[1] or "")
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local _, link, _, title = unpack(entry)  -- We ignore original namespace
    return string.format("[[Retranscription:%s|%s]]", link, title)
end
-- Function 4: Force namespace to "Quotes:"
function p.getQuotesLink(frame)
    local key = string.lower(frame.args[1] or "")
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local _, link, title = unpack(entry)  -- We ignore original namespace
    return string.format("[[Citations:%s|%s]]", link, title)
end

-- Function 5: Force namespace to "Category:Images from"
function p.getImagesLink(frame)
    local key = string.lower(frame.args[1] or "")
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local _, link, _, title = unpack(entry)  -- We ignore original namespace
    return string.format("[[:Catégorie:Images de %s|%s]]", link, title)
end

-- Function 6: Retrieve from link
function p.getEpisodeLink(frame)
    local key = string.lower(frame.args[1] or "")
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local _, link, _, _ = unpack(entry)  -- We ignore original namespace
    return string.format("%s", link)
end

-- Function 7: Get full episode link only from key
function p.getEpisodeFullLink(frame)
    local key = string.lower(frame.args[1] or "")
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local ns, link, _, _ = unpack(entry)

    -- If namespace is empty or nil, omit it
    if ns == "" or ns == nil then
        return string.format("%s", link)
    else
        return string.format("%s:%s", ns, link)
    end
end

-- Function 8: Get episode title only from key
function p.getEpisodeTitle(frame)
    local key = string.lower(frame.args[1] or "")
    local entry = data[key]

    if not entry then
        return "Episode not found"
    end

    local _, _, _, title = unpack(entry)
    return string.format("%s", title)
end

function p.checkAliasDuplicates()
    local seen = {}
    local duplicates = {}

    for alias, _ in pairs(data) do
        if seen[alias] then
            table.insert(duplicates, alias)
        else
            seen[alias] = true
        end
    end

    return duplicates
end

function p.showAliasDuplicates()
    local dups = p.checkAliasDuplicates()
    local out = {}

    table.insert(out, "== Doublons d’alias ==")

    if #dups == 0 then
        table.insert(out, "* Aucun doublon")
    else
        for _, alias in ipairs(dups) do
            table.insert(out, "* " .. alias)
        end
    end

    return table.concat(out, "\n")
end

return p