local export = {}

local lang = require("Module:languages").getByCode("ka")
local m_headword = require("Module:headword")

pos_functions = {}

local forms = {}
local template = [===[<div class="NavFrame" style="float: right; min-width: 290px; max-width: 40%;">
<div class="NavHead">{pagename}的[[Appendix:格魯吉亞語形容詞#變格|變格]]</div>
<div class="NavContent">

{| border="1px solid #505050" style="border-collapse:collapse; background:#FAFAFA; text-align:center; width:100%" class="inflection-table"
|-
! style="background:#BBC9D0; width: 100px;" | 格
! style="background:#BBC9D0" | 形容詞
|-
! style="background:#BBC9D0" | 主格、屬格、工具格
| {nominative}
|-
! style="background:#BBC9D0" | 作格
| {ergative}
|-
! style="background:#BBC9D0" | 與格、狀語格
| {dative}
|-
! style="background:#BBC9D0" | 呼格
| {vocative}
|}</div></div>]===]


function get_adjectival_declension()
	local make_link = require("Module:links").full_link

	local term = mw.title.getCurrentTitle().text
	local erg = mw.ustring.sub(term, 0, -2) .. "მა"
	local dat = mw.ustring.sub(term, 0, -2)
	local voc = mw.ustring.sub(term, 0, -2) .. "ო"
	
	local last = mw.ustring.sub(term, -1, -1)
	local beforeLast = mw.ustring.sub(term, -2, -2)
	if mw.ustring.match(last, "[აეოუ]") or mw.ustring.match(beforeLast, "[აეიოუ]") then
		return [===[<div class="NavFrame" style="float: right; width:150px;"><div class="NavHead">無變格</div></div>]===]
	end
	forms["pagename"] = term
	forms["nominative"] = make_link({lang = lang, term = term})
	forms["ergative"] = make_link({lang = lang, term = erg})
	forms["dative"] = make_link({lang = lang, term = dat})
	forms["vocative"] = make_link({lang = lang, term = voc})
	return require("Module:string utilities").format(template, forms)
end

function export.show(frame)
	local args = frame:getParent().args
	local poscat = frame.args[1]

	local data = {lang = lang, pos_category = poscat, categories = {}, heads = {args["term"] or args["head"]}, inflections = {}}
	
	return pos_functions[poscat](args, data)
end

pos_functions["形容詞"] = function(args, data)
	if args[1] == "-" then --then hope there is no diminutive
		table.insert(data.inflections, {label = "無比較級"})
		table.insert(data.categories, "格魯吉亞語無比較級形容詞")
	else
		local diminutive = args[1]
		local comparative = args["comp"] or "[[უფრო]] " .. (args["term"] or mw.title.getCurrentTitle().text)
		local superlative = args["sup"] or "[[ყველაზე]] " .. (args["term"] or mw.title.getCurrentTitle().text)
	
		table.insert(data.inflections, {label = "比較級", comparative})
		table.insert(data.inflections, {label = "最高級", superlative})
		if diminutive then
			table.insert(data.inflections, {label = "指小詞", diminutive})
		end
	end
	
	return get_adjectival_declension() .. m_headword.full_headword(data)
end

function getModernPlural(term) --detect ჟოკეი too
	local lastLetter = mw.ustring.sub(term, -1)
	if lastLetter == "ი" or lastLetter == "ა" then 
		return mw.ustring.sub(term, 0, -2) .. "ები"
	elseif lastLetter == "ე" or lastLetter == "ო" or lastLetter == "უ" then
		return term .. "ები"
	end
end

function getArchaicPlural(term)
	local lastLetter = mw.ustring.sub(term, -1)
	if lastLetter == "ი" then 
		return mw.ustring.sub(term, 0, -2) .. "ნი"
	else
		return term .. "ნი"
	end
end

pos_functions["專有名詞"] = function(args, data)
	if args[1] ~= nil then
		if args[1] == "-" then --არც გაატრაკო ტო
			table.insert(data.inflections, {label = "不可數"})
		else
			table.insert(data.inflections, {label = "複數", args[1]})
			table.insert(data.categories, "格魯吉亞語可數專有名詞")
		end
	end
	return m_headword.full_headword(data)
end

pos_functions["名詞"] = function(args, data)
	local a, b, c = args[1], args[2], args[3]
	local wordArg = nil

	local isUncountAndCount = a == "~" or b == "~" or c == "~"
	local hasDash = a == "-" or b == "-" or c == "-"
	local hasQuestion = a == "?" or b == "?" or c == "?"
	if hasQuestion then
		return m_headword.full_headword(data)
	end
	
	if a and mw.ustring.match(a, "[ა-ჰ]") then wordArg = a end
	if b and mw.ustring.match(b, "[ა-ჰ]") then wordArg = b end
	if c and mw.ustring.match(c, "[ა-ჰ]") then wordArg = c end

	local hasArchaic = a == "+" or b == "+" or c == "+"
	local hasPlural = a == "0" or b == "0" or c == "0" or not hasDash or wordArg
	local archaic = hasArchaic and getArchaicPlural(args["term"] or mw.title.getCurrentTitle().text) or nil
	local plural = hasPlural and (wordArg or getModernPlural(args["term"] or mw.title.getCurrentTitle().text)) or nil

	if hasDash then
		if plural or archaic then
			table.insert(data.inflections, {label = "一般不可數"})
		else
			table.insert(data.inflections, {label = "不可數"})
		end
	else
		table.insert(data.categories, "格魯吉亞語可數名詞")
		if isUncountAndCount then
			table.insert(data.inflections, {label = "不可數;可數"})
		end
	end

	if hasDash or isUncountAndCount then
		table.insert(data.categories, "格魯吉亞語不可數名詞")
	end

	if plural then
		table.insert(data.inflections, {label = "複數", plural, accel = {form = "p"}})
	end
	if archaic then
		table.insert(data.inflections, {label = "古複數", archaic})
	end
	
	return m_headword.full_headword(data)
end

return export