local p = {}

local m_languages = require("Module:languages")

-- 輔助函數:格式化日期連結
local function formatDateLink(lang, year, month, day, prefix)
	-- 構建維基連結
	local link = string.format("Wiktionary:外語每日一詞/存檔/%s年/%s月#%s日",
		year, month, day)
	
	local prefixText = prefix or ""
	if prefix == nil then
		prefixText = "、"
	end
	
	-- 使用中文格式的日期顯示
	local date = string.format("%s年%s月%s日", year, month, day)
	
	return string.format('%s[[%s|%s]]',
		prefixText,
		link,
		date)
end

-- 輔助函數:檢查日期是否已過
local function hasDatePassed(year, month, day)
	local current = os.time()
	local target = os.time({
		year = year,
		month = month,
		day = day,
		hour = 0,
		min = 0,
		sec = 0
	})
	return current >= target
end

-- 入口函數
function p.show(frame)
	local parent_args = frame:getParent().args
	local params = {
		[1] = {required = true, default = "und"},
		[2] = {required = true, default = "2024"},
		[3] = {required = true, default = "8月"},
		[4] = {required = true, default = "1日"},
	}
	
	local args = require("Module:parameters").process(parent_args, params)
	
	local lang = args[1] -- 語言代碼
	local year = tonumber(args[2])
	local monthStr = args[3] -- 格式:「3月」
	local dayStr = args[4]   -- 格式:「7日」
	
	-- 檢查月份格式
	local month = monthStr:match("^(%d+)月$")
	if not month then
		error('如果此頁面內容來自英語維基詞典,請將使用了 Template:fwotd 的部分移除。')
	end
	month = tonumber(month)
	
	local day = dayStr:match("^(%d+)日$")
	if not day then
		error('格式:{{fwotd|語言代碼|yyyy|x月|y日}}')
	end
	day = tonumber(day)
	
	-- 取得語言名稱
	local langName = m_languages.getByCode(lang):getCanonicalName()
	if not langName then
		langName = lang
	end
	
	-- 建立分類文字
	local categories = ''
	local namespace = mw.title.getCurrentTitle().namespace
	if namespace == 0 or namespace == 118 then
		categories = string.format(
			'\n[[Category:%s外語每日一詞]]\n[[Category:外語每日一詞存檔]]',
			langName
		)
	end
	
	-- 如果日期尚未到來,只回傳分類
	if not hasDatePassed(year, month, day) then
		return categories
	end
	
	-- 產生輸出
	local output = mw.html.create('div')
	output:addClass('was-wotd')
	output:addClass('floatright')
	output:css('margin-right', '15px')
	output:css('clear', 'both')
	
	local small = output:tag('small')
	small:attr('title', string.format(
		'本詞於%s年%s月%s日獲選為維基詞典外語每日一詞',
		year, month, day
	))
	
	-- 添加主要日期連結
	small:wikitext(formatDateLink(
		lang, year, month, day,
		'外語每日一詞 – '
	))
	
	-- 添加額外的日期連結(如果有的話)
	if args[5] and args[6] and args[7] then
		small:wikitext(formatDateLink(
			lang, args[5], args[6], args[7]
		))
	end
	if args[8] and args[9] and args[10] then
		small:wikitext(formatDateLink(
			lang, args[8], args[9], args[10]
		))
	end
	
	return tostring(output) .. categories
end

return p