local p = {}

function p.ill(frame)
	local args = mw.getCurrentFrame():getParent().args
	args['viewInterwikiPageName'] = '0'
	return p.runIll(args)
end

function p.ill_vipn(frame)
	local args = mw.getCurrentFrame():getParent().args
	args['viewInterwikiPageName'] = '1'
	return p.runIll(args)
end

function p.runIll(args)
	local mIllLink = require('モジュール:仮リンク/link/sandbox')
	local result = ""
	
	-- ソートキー
	local namespace = mw.title.getCurrentTitle().namespace
	if namespace % 2 == 0 then
		if namespace <= 18 then
			nsa = namespace / 2
		else
			nsa = "9" .. namespace
		end
		sort = nsa .. "]]"
	else
		if namespace < 10 then
			nsa = "00" .. namespace
		elseif namespace < 100 then
			nsa = "0" .. namespace
		else
			nsa = namespace
		end
		sort = "話" .. nsa .. "]]"
	end
	
	local main = mw.title.new(args[1])
	if main.exists then
		title = main
		args['link'] = args[1]
	else
		-- alt引数 alt1からalt4まで対応 iを5までとしているのは全て記事がなかった場合にmain/args[1]を使用するため
		for i = 1, 5 do
			altX = args['alt'..i]
			if altX == "" or altX == nil or i == 5 then
				title = main
				args['link'] = args[1]
				break
			end
			altx = mw.title.new(altX)
			if altx.exists then
				title = altx
				args['link'] = altX
				result = "[[Category:代替記事名にリンクしている仮リンクを含むページ|"
				result = result .. sort
				break
			end
		end
	end
	
	if title.exists then
		if title.isRedirect then
			-- 引数1の記事がリダイレクト
			if args['FIXME'] ~= "" and args['FIXME'] ~= nil then
				-- FIXME引数指定
				args['view'] = 1
				args['title'] = "(リンク先が誤っている可能性があります。)"
			else
-- インデント+1ここから
			local argRedirect = args['redirect']
			if argRedirect == nil then argRedirect = "" end
			local argPreserve = args['preserve']
			if argPreserve == nil then argPreserve = "" end
			args['view'] = argRedirect .. argPreserve
-- インデント+1ここまで
				if args['view'] == "" then
					args['title'] = ""
				else
-- インデント+2ここから
			args['title'] = "(リンク先の項目はリダイレクトなため、新規作成や他言語版からの翻訳が望まれます。)"
-- インデント+2ここまで
				end
			end
			result = result .. mIllLink.otherLangLinkList(args)
		else
			-- 引数1の記事がリダイレクト以外で存在している
			if args['FIXME'] ~= "" and args['FIXME'] ~= nil then
				-- FIXME引数指定
				args['view'] = 1
				args['title'] = "(リンク先が誤っている可能性があります。)"
			else
-- インデント+1ここから
			args['view'] = args['preserve']
-- インデント+1ここまで
				if args['view'] == "" then
					args['title'] = ""
				else
-- インデント+2ここから
			args['title'] = "(リンク先の項目はまだ不十分なため、加筆や他言語版からの追加翻訳が望まれます。)"
-- インデント+2ここまで
				end
			end
			result = mIllLink.otherLangLinkList(args)
		end
		
		-- 日本語版が記事・リダイレクト問わず存在する場合のカテゴリ 多言語版リンクの表示有無は関係しない
		if namespace == "0" then
			result = result .. "[[Category:解消済み仮リンクを含む記事]]"
		else
			result = result .. "[[Category:解消済み仮リンクを含むページ|"
			result = result .. sort
		end
	else
		-- 引数1の記事が存在しない
		if args['nolink'] ~= "" and args['nolink'] ~= nil then
			args['black'] = 1
		end
		args['view'] = 1
		args['title'] = "(リンク先の項目はまだありません。新規の執筆や他言語版からの翻訳が望まれます。)"
		result = mIllLink.otherLangLinkList(args)
	end
	
	-- preserve・redirectカテゴリ
	if args['preserve'] ~= "" and args['preserve'] ~= nil then
		result = result .. "[[Category:preserve引数が指定された仮リンクを含むページ|"
		result = result .. sort
	end
	if args['redirect'] ~= "" and args['redirect'] ~= nil then
		result = result .. "[[Category:redirect引数が指定された仮リンクを含むページ|"
		result = result .. sort
	end
	
	if args['jafix'] ~= "" and args['jafix'] ~= nil then
		result = result .. '<sup class="noprint Inline-Template nowrap">&#91;<span title="'
		if args['jafix'] == "1" then
			result = result .. "日本語版記事名を検討する必要があります。"
		else
			result = result .. args['jafix']
		end
		result = result .. '">訳語疑問点</span>&#93;</sup>[[Category:訳語に疑問点のある記事|仮リンク]]'
	end
		
	if args['FIXME'] ~= "" and args['FIXME'] ~= nil then
		result = result .. '<sup class="noprint Inline-Template nowrap">&#91;[[:Category:FIXME引数が指定された仮リンクを含むページ|<span title="'
		if args['FIXME'] == "1" then
			result = result .. "このリンクは修正が必要です。"
		else
			result = result .. args['FIXME']
		end
		result = result .. '">要リンク修正</span>]]&#93;</sup>[[Category:FIXME引数が指定された仮リンクを含む記事|'
		result = result .. sort
	end
	
	return result
end

return p