local p = {}
p.lang = mw.getContentLanguage()
p.thisyear = tonumber(p.lang:formatDate( 'o', date, true))
p.thisweek = tonumber(p.lang:formatDate( 'W', date, true))
p.thismonth = tonumber(p.lang:formatDate( 'n', date, true))

function p.entry(year, week, topic)
    local pagename = string.format("Wikipedia:Konkurranser/Ukens konkurranse %04d-%02d", year, week)
    if year == p.thisyear and week == p.thisweek then
        -- sjekk om siden eksisterer
        local page = mw.title.new(pagename)
        if not page.exists then
            local s = "'''" .. week .. "''' " .. topic
            s = s .. string.format(" ''<small>[{{fullurl:Wikipedia:Konkurranser/Ukens konkurranse %04d-%02d|action=edit&preload=Mal:Ukens_konkurranse_preload}} (opprett)]</small>", year, week)
            return s
        end
    end
    if topic == "" then
        return "'''" .. week .. "''' (ikke bestemt)"
    end
    return "'''" .. week .. "''' [[" .. pagename .. "|" .. topic .. "]]"
end

function p.lastweek(frame)
    local year = tonumber(frame.args[1])
    local week = tonumber(p.lang:formatDate('W', year ..'-12-31', true))
    if week == 1 then
        -- vi hopper litt tilbake i tid :)
        week = tonumber(p.lang:formatDate('W', year ..'-12-24', true))
    end
    return week
end

function p.innhold(frame)
    local year = tonumber(frame.args[1])
    local week = 1
    local entries = {}
    local endweek = p.lastweek(frame)
    if year == p.thisyear then
        endweek = p.thisweek
    end
    local modname = 'Module:Ukens konkurranse-liste ' .. year
    local topics = require(modname)
    for week = 1, endweek, 1
    do
        if not (topics[week] == nil) then
            table.insert(entries, p.entry(year, week, topics[week]))
        end
    end
    return "\n*" .. frame:preprocess(table.concat(entries, "\n*"))
end

function p.nesteuke(frame)
    local week = tonumber(p.lang:formatDate('W', '+1 week', true))
    local year = tonumber(p.lang:formatDate('o', '+1 week', true))
    
    -- Sjekk om konkurransen er lagt inn i [[Module:Ukens konkurranse-liste YYYY]]
    local modname = 'Module:Ukens konkurranse-liste ' .. year
    local topics = require(modname)
    local topic = topics[week]
    if topic == '' then
        return 'Mangler forslag <small>[[' .. modname .. '|(føy til forslag)]]</small>'
    end

    -- Sjekk om konkurransesiden eksisterer
    local pagename = string.format("Wikipedia:Konkurranser/Ukens konkurranse %04d-%02d", year, week)
    local page = mw.title.new(pagename)
    if not page.exists then
        return frame:preprocess(string.format("%s ''<small>[{{fullurl:Wikipedia:Konkurranser/Ukens konkurranse %04d-%02d|action=edit&preload=Mal:Ukens_konkurranse_preload}} (opprett)]</small>''", topic, year, week))
    end
    
    -- Konkurransen eksisterer 
    return string.format("[[%s|%s]]", pagename, topic)

end

-- Skriver ut lenke til månedens konkurranse for en gitt måned
function p.entry_mk(year, month, topic)
    local key = string.format('%04d-%02d', year, month)
    local pagename = string.format("Wikipedia:Konkurranser/Månedens konkurranse %s", key)
    local monthName = p.lang:formatDate( 'F', key .. '-01' )
    if year == p.thisyear and month == p.thismonth then
        -- sjekk om siden eksisterer
        local page = mw.title.new(pagename)
        if not page.exists then
            local s = monthName .. ": " .. topic
            s = s .. string.format(" ''<small>[{{fullurl:Wikipedia:Konkurranser/Månedens konkurranse %s|action=edit&preload=Mal:Ukens_konkurranse_preload}} (opprett)]</small>", key)
            return s
        end
    end
    if topic == "" then
        return monthName .. ": (ikke bestemt)"
    end
    return monthName .. ": [[" .. pagename .. "|" .. topic .. "]]"
end

-- Skriver ut lenker til alle månedens konkurranser for et gitt år
-- Til bruk i navboks.
function p.innhold_mk(frame)
    local year = tonumber(frame.args[1])
    local key, month
    local entries = {}
    local topics = require('Modul:Månedens konkurranse')
    for month = 1, 12, 1
    do
        key = string.format('%04d-%02d', year, month)
        if not (topics[key] == nil) then
            table.insert(entries, p.entry_mk(year, month, topics[key]))
        end
    end
    return "\n*" .. frame:preprocess(table.concat(entries, "\n*"))
end

function p.nestemaaned(frame)
    local year = tonumber(p.lang:formatDate('o', '+1 month', true))
    local month = tonumber(p.lang:formatDate('n', '+1 month', true))
    local key = string.format('%04d-%02d', year, month)
    
    -- Sjekk om konkurransen er lagt inn i [[Modul:Månedens konkurranse]]
    local topics = require('Modul:Månedens konkurranse')
    local topic = topics[key]
    if topic == '' then
        return 'Mangler forslag <small>[[Module:Månedens konkurranse|(føy til forslag)]]</small>'
    end

    -- Sjekk om konkurransesiden eksisterer
    local pagename = string.format("Wikipedia:Konkurranser/Månedens konkurranse %s", key)
    local page = mw.title.new(pagename)
    if not page.exists then
        return frame:preprocess(string.format("%s ''<small>[{{fullurl:Wikipedia:Konkurranser/Månedens konkurranse %s|action=edit&preload=Mal:Ukens_konkurranse_preload}} (opprett)]</small>''", topic, key))
    end
    
    -- Konkurransen eksisterer 
    return string.format("[[%s|%s]]", pagename, topic)

end

function p.current(frame)
    local lang = mw.getContentLanguage()
    local month = tonumber(lang:formatDate('n', now, true))
    local year = tonumber(lang:formatDate('Y', now, true))
    local key = string.format('%04d-%02d', year, month)
    local topics = require( 'Modul:Månedens konkurranse')
    local topic = topics[key]
    return topic
end

function p.contest_name(frame)
    local year
    local month
    if frame.args[1] == nil then
        return p.current(frame)
    end
    if frame.args[2] == nil then
        local spl = mw.text.split(frame.args[1], '-', true)
        year = tonumber(spl[1])
        month = tonumber(spl[2])
    else
        year = tonumber(frame.args[1])
        month = tonumber(frame.args[2])
    end
    local key = string.format('%04d-%02d', year, month)
    local topics = require( 'Modul:Månedens konkurranse')
    local topic = topics[key]
    return topic
end
return p