{{i}} Документація модуля[створити]
local list = require('Module:List')

local p = {}

local function getFormattedEntry(args, counter)
    if counter == 1 then
        return ""
    elseif counter == 2 then
        return args[1]
    else
        return list.makeList("unbulleted", args)
    end
end

local function createComicEntry(appearanceMajor, appearanceMinor, appearanceDate)
    local fullString = {}
    local counter = 1
    
    if appearanceMajor then
        if appearanceMinor == nil then
            fullString[counter] = appearanceMajor
            counter = counter + 1
        else
            fullString[counter] = appearanceMajor .. ' ' .. appearanceMinor
            counter = counter + 1
        end
    end
    
    if appearanceDate then
        fullString[counter] = "(" .. appearanceDate .. ")"
        counter = counter + 1
    end

    return getFormattedEntry(fullString, counter)
end

local function createGenericEntry(appearanceMajor, appearanceMinor, appearanceDate)
    local fullString = {}
    local counter = 1
    
    if appearanceMinor then
        fullString[counter] = appearanceMinor
        counter = counter + 1
    end
    
    if appearanceMajor then
        fullString[counter] = appearanceMajor
        counter = counter + 1
    end
    
    if appearanceDate then
        fullString[counter] = appearanceDate
        counter = counter + 1
    end

    return getFormattedEntry(fullString, counter)
end

local function getFormattedComicMinorWorkTitle(issue)
    if issue then
        if string.find(issue, "№ ") then
            return "''" .. issue .. "''"
        else
            local formattedString = string.gsub(issue, "%d+", "№ %1")
            return formattedString
        end
    end
    return nil
end

local function getFormattedGenericMinorWorkTitle(title)
    if title then
        return '«' .. title .. '»'
    end
    return nil
end

local function getFormattedMajorWorkTitle(title, isComic)
    if title then
        if isComic then
            return "''" .. title .. "''"
        else
            return '«' .. title .. '»'
        end
    end
    return nil
end

local function _getFormattedAppearance(args)
    local appearanceMajor = args['major_work']
    local appearanceMinor = args['minor_work']
    
    local isComic = false
    if args['issue'] ~= nil then
        appearanceMinor = args['issue']
        isComic = true
    end
    
    local appearanceDate = args['date']
    
    local formattedAppearanceMajor = getFormattedMajorWorkTitle(appearanceMajor, isComic)

    if isComic == false then
        local formattedAppearanceMinor = getFormattedGenericMinorWorkTitle(appearanceMinor)
        return createGenericEntry(formattedAppearanceMajor, formattedAppearanceMinor, appearanceDate)
    else
        local formattedAppearanceMinor = getFormattedComicMinorWorkTitle(appearanceMinor)
        return createComicEntry(formattedAppearanceMajor, formattedAppearanceMinor, appearanceDate)
    end
end

function p.getFormattedAppearance(frame)
    local getArgs = require('Module:Arguments').getArgs
    local args = getArgs(frame)
    local isComic = (args['issue'] ~= nil)

    return _getFormattedAppearance(args)
end

return p