local export = {}

local normalize_keys = {
	["g"] = "genders",
	["tr"] = "translit",
	["ts"] = "transcription",
}

local function parse_and_apply_tags(result, tags)
	local last_key = nil
	for tag in mw.ustring.gmatch(tags, "[^,]+") do
		local key, value = mw.ustring.match(tag, "([^:]+):(.*)")
		if not value then
			value = tag
			if last_key then
				result[last_key] = result[last_key] .. "," .. value
			end
		else
			key = normalize_keys[key] or key
			result[key] = value
			last_key = key
		end
	end
end

-- parses <key:value> pairs in inflections. modifies the table passed in.
function export.parse_overrides_in_inflections(inflections)
	for _, inflection in ipairs(inflections) do
		for index, inflected_form in ipairs(inflection) do
			local term = inflected_form
			if type(term) == "table" then
				term = term.term
			end
			
			if type(term) == "string" then
				local tag_start, tag_end = mw.ustring.find(term, "<.+>$")
				if tag_start then
					local result
					local tag = mw.ustring.sub(term, tag_start + 1, tag_end - 1)
					term = mw.ustring.sub(term, 1, tag_start - 1)
		
					if type(inflected_form) == "table" then
						result = inflected_form
					else
						result = { term = term }
					end
					
					parse_and_apply_tags(result, tag)
					
					if type(result.genders) == "string" then
						result.genders = mw.text.split(result.genders, ",")
					end
					if type(result.q) == "string" then
						result.q = mw.text.split(result.q, ",")
					end
					inflection[index] = result
				end
			end
		end
	end
end

return export