local codepoint = require("Module:string utilities").codepoint
local loadData = mw.loadData

local export = {}

local function format_Tangut_text(text) return '<span class="Tang" lang="txg">' .. text .. '</span>' end

function export.pron(frame)
	local args = frame:getParent().args
	local title = args["1"] or mw.title.getCurrentTitle().text
	local prons = {
		loadData("Module:txg/data/LFW2008"),
		loadData("Module:txg/data/Miyake"),
		loadData("Module:txg/data/Kychanov2006"),
		loadData("Module:txg/data/Sofronov1968"),
		loadData("Module:txg/data/Nishida1966")
	}
	
	local pron = {{}, {}, {}, {}, {}}
	
	local sources = {
		"[[w:Li Fanwen|Li Fanwen]] 2008",
		"[[w:Marc Miyake|Miyake]] 2019",
		"[[w:Yevgeny Kychanov|Kychanov]] 2006",
		"Sofronov 1968",
		"[[w:Tatsuo Nishida|Nishida]] 1966"
	}
	
	local text = {'<div class="toccolours zhpron" style="width: max-content; max-width: 100%; padding-right: 1em; font-size:100%; overflow: hidden">'}
	
	for char in title:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
		if char ~= "-" then
			for i = 1, 5 do
				table.insert(pron[i], prons[i][char] or "?")
			end
		end
	end
	
	for i = 1, 5 do
		for _, v in ipairs(pron[i]) do
			if v ~= "?" then
				table.insert(text, "\n* <small>(<i>" .. sources[i] .. "</i>)</small>: ")
				table.insert(text, "*" .. table.concat(pron[i], " "))
			break end
		end
	end
	
	table.insert(text, "</div>")
	
	return table.concat(text)
	
end

function export.newDer(frame)
	local title = mw.title.getCurrentTitle().subpageText
	if 101119 > codepoint(title) and codepoint(title) >= 100352 then
		idslist = require("Module:txg/data/idslist").list
	else
		wordlist = require("Module:txg/data/wordlist").list
	end
	local args = frame:getParent().args
	
	local result = {}
	
	for _, arg in ipairs(args) do
		table.insert(result, arg)
	end
	
	if wordlist then
		for _, word in ipairs(wordlist) do
			if word:match(title) and word ~= title then
				table.insert(result, word)
			end
		end
	elseif idslist then
		for char, seq in pairs(idslist) do
			if seq:match(title) and seq ~= title then
				table.insert(result, char)
			end
		end
	end
	
	return "{{col-auto|txg|" .. table.concat(result, "|") .. "}}"
end

function export.see(frame)
	local params = {
		[1] = {},
	}
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	local title = args[1]
	local curr_title = mw.title.getCurrentTitle().subpageText
	local content = mw.title.new(title):getContent()
	local senses = {}
	local sense_id = 0
	local j, pos, s, section
	
	if title == curr_title then
		return error("The soft-directed item is the same as the page title.")
	end
	
	if content then
		if not content:match("==Tangut==") then
			categories = categories .. "[[Category:Tangut redlinks/txg-see]]"
		elseif not content:match("txg%-pron") and not content:match("txg%-see") then
			require("Module:debug").track("txg-see/unidirectional reference to variant")
		elseif not content:match(curr_title) then
			require("Module:debug").track("txg-see/unidirectional reference variant→orthodox")
		end
	end
	
	while true do
		_, j, language_name, s = content:find("%f[=]==%s*([^=]+)%s*==(\n.-)\n==%f[^=]", pos)
		
		if j == nil then
			i, j, language_name, s = content:find("%f[=]==%s*([^=]+)%s*==(\n.+)", pos)
		end
		
		if j == nil then
			break
		else
			pos = j - 1
		end
		
		if language_name == "Tangut" then
			section = s
		end
	end
		
	if not section then
		return ""
	end
	
	section = section:gsub("\n===+Etymology.-(\n==)", "%1")
	section = section:gsub("\n===+Glyph origin.-(\n==)", "%1")
	
	local text = {'<div class="toccolours zhpron" style="width: max-content; padding-left: 1em; padding-right: 1.5em; padding-bottom: 1em; font-size:100%; overflow: hidden">'}
	
	table.insert(text, 'This character is a variant form of <span style="font-size:150%;">' .. frame:expandTemplate{ title = "l", args = { "txg", title} } .. "</span>")
	
	for sense in section:gmatch("\n# ([^\n]+)") do
		if not sense:match("rfdef") and not sense:match("defn") then
			sense_id = sense_id + 1
			table.insert(senses, sense)
		end
	end
	if sense_id == 0 then
		table.insert(text, ".")
	else
		table.insert(text, ":\n# " .. table.concat(senses, "\n# "))
	end
	
	table.insert(text, "</div>")
	
	return frame:preprocess( table.concat(text) )
		
end

return export