local p = {}

local Navbox = require("Module:Navbox")
local country = {
	Afghanistan = {""},
	Albania = {""},
	Algeria = {""},
	Andorra = {""},
	Angola = {""},
	["Antigua and Barbuda"] = {""},
	Argentina = {""},
	Armenia = {""},
	Australia = {""},
	Austria = {""},
	Azerbaijan = {""},
	Bahamas = {"the Bahamas"},
	Bahrain = {""},
	Bangladesh = {""},
	Barbados = {""},
	Belarus = {""},
	Belgium = {""},
	Belize = {""},
	Benin = {""},
	Bhutan = {""},
	Bolivia = {""},
	["Bosnia and Herzegovina"] = {""},
	Botswana = {""},
	Brazil = {""},
	Brunei = {""},
	Bulgaria = {""},
	["Burkina Faso"] = {""},
	Burundi = {""},
	Cambodia = {""},
	Cameroon = {""},
	Canada = {""},
	["Cape Verde"] = {""},
	["Central African Republic"] = {"the Central African Republic"},
	Chad = {""},
	Chile = {""},
	China = {""},
	Colombia = {""},
	Comoros = {""},
	["Democratic Republic of the Congo"] = {"the Democratic Republic of the Congo"},
	["Republic of the Congo"] = {"the Republic of the Congo"},
	["Costa Rica"] = {""},
	Croatia = {""},
	Cuba = {""},
	Cyprus = {""},
	["Czech Republic"] = {"the Czech Republic"},
	Denmark = {""},
	Djibouti = {""},
	Dominica = {""},
	["East Timor"] = {""},
	["Dominican Republic"] = {"the Dominican Republic"},
	Ecuador = {""},
	Egypt = {""},
	["El Salvador"] = {""},
	["Equatorial Guinea"] = {""},
	Eritrea = {""},
	Estonia = {""},
	Eswatini = {""},
	Ethiopia = {""},
	Fiji = {""},
	Finland = {""},
	France = {""},
	Gabon = {""},
	Gambia = {"the Gambia"},
	Georgia = {"Georgia (country)"},
	Germany = {""},
	Ghana = {""},
	Greece = {""},
	Grenada = {""},
	Guatemala = {""},
	Guinea = {""},
	["Guinea-Bissau"] = {""},
	Guyana = {""},
	Haiti = {""},
	Honduras = {""},
	Hungary = {""},
	Iceland = {""},
	India = {""},
	Indonesia = {""},
	Iran = {""},
	Iraq = {""},
	Ireland = {"the Republic of Ireland"},
	Israel = {""},
	Italy = {""},
	["Ivory Coast"] = {""},
	Jamaica = {""},
	Japan = {""},
	Jordan = {""},
	Kazakhstan = {""},
	Kenya = {""},
	Kiribati = {""},
	Kosovo = {""},
	["North Korea"] = {""},
	["South Korea"] = {""},
	Kuwait = {""},
	Kyrgyzstan = {""},
	Laos = {""},
	Latvia = {""},
	Lebanon = {""},
	Lesotho = {""},
	Liberia = {""},
	Libya = {""},
	Liechtenstein = {""},
	Lithuania = {""},
	Luxembourg = {""},
	Madagascar = {""},
	Malawi = {""},
	Malaysia = {""},
	Maldives = {""},
	Mali = {""},
	Malta = {""},
	["Marshall Islands"] = {"the Marshall Islands"},
	Mauritania = {""},
	Mauritius = {""},
	Mexico = {""},
	["Federated States of Micronesia"] = {"the Federated States of Micronesia"},
	Moldova = {""},
	Monaco = {""},
	Mongolia = {""},
	Montenegro = {""},
	Morocco = {""},
	Mozambique = {""},
	Myanmar = {""},
	Namibia = {""},
	Nauru = {""},
	Nepal = {""},
	Netherlands = {"the Netherlands"},
	["New Zealand"] = {""},
	Nicaragua = {""},
	Niger = {""},
	Nigeria = {""},
	["North Macedonia"] = {""},
	Norway = {""},
	Oman = {""},
	Pakistan = {""},
	Palestine = {"State of Palestine"},
	Palau = {""},
	Panama = {""},
	["Papua New Guinea"] = {""},
	Paraguay = {""},
	Peru = {""},
	Philippines = {"the Philippines"},
	Poland = {""},
	Portugal = {""},
	Qatar = {""},
	Romania = {""},
	Russia = {""},
	Rwanda = {""},
	["Saint Kitts and Nevis"] = {""},
	["Saint Lucia"] = {""},
	["Saint Vincent and the Grenadines"] = {""},
	Samoa = {""},
	["San Marino"] = {""},
	["São Tomé and Príncipe"] = {""},
	["Saudi Arabia"] = {""},
	Senegal = {""},
	Serbia = {""},
	Seychelles = {""},
	["Sierra Leone"] = {""},
	Singapore = {""},
	Slovakia = {""},
	Slovenia = {""},
	["Solomon Islands"] = {"the Solomon Islands"},
	Somalia = {""},
	["South Africa"] = {""},
	["South Sudan"] = {""},
	Spain = {""},
	["Sri Lanka"] = {""},
	Sudan = {""},
	Suriname = {""},
	Sweden = {""},
	Switzerland = {""},
	Syria = {""},
	Taiwan = {""},
	Tajikistan = {""},
	Tanzania = {""},
	Thailand = {""},
	Togo = {""},
	Tonga = {""},
	["Trinidad and Tobago"] = {""},
	Tunisia = {""},
	Turkey = {""},
	Turkmenistan = {""},
	Tuvalu = {""},
	Uganda = {""},
	Ukraine = {""},
	["United Arab Emirates"] = {"the United Arab Emirates"},
	["United Kingdom"] = {"the United Kingdom"},
	["United States"] = {"the United States"},
	Uruguay = {""},
	Uzbekistan = {""},
	Vanuatu = {""},
	["Vatican City"] = {""},
	Venezuela = {""},
	Vietnam = {""},
	["Western Sahara"] = {""},
	Yemen = {""},
	Zambia = {""},
	Zimbabwe = {""},
}

local function li(text)
	local li = mw.html.create("li")
	li
		:wikitext(text)
		:done()
	return tostring(li)
end

local function linktarget(x, y)
	if y ~= nil and y == "" then
		return x
	else
		return y
	end
end

local function links(args1, args2, argsprefix, argssuffix, sorter, redlinks, override)
	local list = {}
	local prefix = (args1 or argsprefix or "") .. " "
	local suffix = args2 or argssuffix or ""
	for x, y in pairs(sorter) do
		local target = nil
		if redlinks then
			if override[y] then
				target = override[y]
			elseif y == "Georgia" or y == "Palestine" then
				if mw.title.new(prefix..country[y][1]..suffix).exists then
					target = prefix..country[y][1]..suffix
				else
					target = prefix..y..suffix
				end
			else
				target = prefix..linktarget(y, country[y][1])..suffix
			end
		else -- noredlinks
			if override[y] then
				if mw.title.new(override[y]).exists then
					target = override[y]
				end
			elseif mw.title.new(prefix..linktarget(y, country[y][1])..suffix).exists then
				target = prefix..linktarget(y, country[y][1])..suffix
			elseif y == "Georgia" or y == "Palestine" then
				if mw.title.new(prefix..y..suffix).exists then
					target = prefix..y..suffix
				end
			end
		end
		if target then
			table.insert(list, li("[["..target.."|"..y.."]]" ) )
		end
	end
	return list
end

function p.main(frame)
	local pframe = frame:getParent()
	local config = frame.args
	local args = pframe.args
	
	return p._main(args)
end

function p._main(args)
	local state, titlemid, title, group1
	if mw.title.getCurrentTitle() == "Template:World topic" then
		state = "autocollapse"
	else
		state = args.state
	end
	if args[1] ~= nil or args.prefix ~= nil and (args[2] == nil or args.suffix == nil) then
		titlemid = " the"
	end
	if args.title ~= nil then
		title = args.title
	else
		title = "[["..(args[1] or args.prefix or "")..(titlemid or "").." World"..(args.suffix or "").."]]"
	end
	if args.group1 ~= nil and args.group1 ~= "" then
		group1 = args.group1
	end
	local sorter = {}
	for n in pairs(country) do
		table.insert(sorter, n)
	end
	table.sort(sorter)

	-- parse link overrides, e.g. |link_United_States=Foo sets override["United States"] = "Foo"
	local override = {}
	for k,v in pairs(args) do
		local country = mw.ustring.match(k, "^link_(.*)")
		if country then
			country = mw.ustring.gsub(country, "_", " ")
			override[country] = v
		end
	end
	
	local redlinks = args.noredlinks == nil
	local list1 = table.concat(links(args[1], args[2], args.prefix, args.suffix, sorter, redlinks, override) )
	local navarguments = {
		name = args.name or "World topic",
		state = state,
		navbar = args.navbar or "Tnavbar",
		border = args.border,
		title = title,
		image = args.image,
		titlestyle = args.titlestyle,
		bodystyle = args.bodystyle,
		abovestyle = args.abovestyle,
		belowstyle = args.belowstyle,
		groupstyle = args.groupstyle,
		liststyle = args.liststyle,
		listclass  = "hlist",
		above = args.above,
		group1 = group1,
		list1 = list1
	}
	return Navbox._navbox(navarguments)
end

return p
"https://si.wikipedia.org/w/index.php?title=Module:World_topic&oldid=577531" වෙතින් සම්ප්‍රවේශනය කෙරිණි