بەڵگەدارکردنی مۆدیوول[دروست بکە]
local MessageBox = require('Module:Message box')
local Gadgets = require('Module:Gadgets')
local Arguments = require('Module:Arguments')
local TableTools = require('Module:TableTools')

local p = {}

p.main = function(frame)
	local args = Arguments.getArgs(frame)
	return p.core(args.page or mw.title.getCurrentTitle().fullText)
end

p.core = function(page)
	local len = page:len()
	if len < 4 then
		-- Too short page name, do nothing
		return ''
	end
	
	if page:sub(-4, -1) == '.css' then
		local basepage = page:sub(0, -5)
		local sisterpage = basepage..'.js'
		return p.makeMessage('css', mw.title.new(basepage), mw.title.new(sisterpage), 'js')
	end
	
	if page:sub(-3, -1) == '.js' then
		local basepage = page:sub(0, -4)
		local sisterpage = basepage..'.css'
		return p.makeMessage('js', mw.title.new(basepage), mw.title.new(sisterpage), 'css')
	end
end

local skins = {
	['common'] = true,
	['vector-2022'] = true,
	['vector'] = true,
	['timeless'] = true,
	['minerva'] = true,
	['monobook'] = true,
	['modern'] = true,
	['cologneblue'] = true
}

p.gadget_text = function(name, repo)
	local lang = mw.getContentLanguage()
	local options = repo[name].options
	local dependents = {}
	if options.hidden ~= nil then
		-- Find dependents
		for n, c in pairs(repo) do
			local deps = c.options.dependencies and 
				TableTools.listToSet(mw.text.split(c.options.dependencies, ',', false)) or {}
			local peers = c.options.peers and 
				TableTools.listToSet(mw.text.split(c.options.peers, ',', false)) or {}
			if deps['ext.gadget.'..name] ~= nil or peers[name] ~= nil then 
				table.insert(dependents, '[[Special:Gadgets#gadget-'..n..'|'..n..']]')
			end
		end
	end
	return 'ئەم ئامڕازە وەک بەشێک لە ' ..
		'ئامڕازی [[Special:Gadgets#gadget-'..name..'|'..name..']] بار کراوە' ..
		(options.hidden ~= nil and '، ئامڕازێکی شاراوەیە'..
			(#dependents > 0 and ' و لەلایەن '..mw.text.listToText(dependents)..'بەکاربراوە.' or '.') or 
		(options.default ~= nil and '، <b>کە بە شێوەی دیفاڵت چالاک کراوە</b>.' or 
		('، لەلایەن '..lang:formatNum(Gadgets.get_usage(name))..' بەکارھێنەر بەکاربراوە. '))) ..
		'<br>'
end

p.makeMessage = function(pagetype, basepage, sisterpage, sistertype)
	local text = ''
	if basepage.namespace == 2 then
		if skins[basepage.subpageText] ~= nil then
			-- We are on a user skin file
			text = 'پەڕەی ھاوەڵی .'..sistertype..' بۆ ئەم پێستە '..
				(sisterpage.exists and 'لە' or 'دەتوانرێت لە')..' [['..sisterpage.fullText..']]' .. (sisterpage.exists and 'دایە' or 'زیاد بکرێت') ..'.'
		else
			-- We are on some script page, not a user skin file
			local docpageExists = basepage.exists
			local sisterpageExists = sisterpage.exists
			
			if docpageExists and sisterpageExists then
				text = 'وا دیارە ئەم [[:en:Wikipedia:User scripts|سکریپتی بەکارھێنەرە]] پەڕەیەکی بەڵگەنامەی لە [['..basepage.fullText..']] و پەڕەیەکی ھاوەڵیشی لەژێر '..sistertype..'. بە ناوی [['..sisterpage.fullText..']] ھەیە.'
			elseif docpageExists and not sisterpageExists then
				text = 'وا دیارە ئەم [[:en:Wikipedia:User scripts|سکریپتی بەکارھێنەرە]] پەڕەیەکی بەڵگەنامەی لە [['..basepage.fullText..']] ھەیە.'
			elseif sisterpageExists then
				text = 'بەڵگەنامەی ئەم [[:en:Wikipedia:User scripts|سکریپتی بەکارھێنەرە]] دەتوانرێت لە [['..basepage.fullText..']] زیاد بکرێت. وا دیارە ئەم سکریپتی بەکارھێنەرە پەڕەیەکی ھاوەڵی لەژێر '..sistertype..'. لە [['..sisterpage.fullText..']] ھەیە. '
			else 
				text = 'بەڵگەنامەی ئەم [[:en:Wikipedia:User scripts|سکریپتی بەکارھێنەرە]] دەتوانرێت لە [['..basepage.fullText..']] زیاد بکرێت.'
			end
		end
	
	elseif basepage.namespace == 8 then
		if basepage.text:find('^Gadget-') ~= nil then
			local gadgetRepo = Gadgets.parse()
			local shortName = basepage.text:gsub('^Gadget%-', '') .. '.' .. pagetype
			for name, config in pairs(gadgetRepo) do
				if TableTools.inArray(config.pages, shortName) then
					text = text .. p.gadget_text(name, gadgetRepo)
				end
			end
		end
	end
	
	if text ~= '' then
		return MessageBox.main('fmbox', {
			id = 'mw-script-doc',
			type = 'system',
			image = '[[File:Template-info.svg|43x40px]]',
			style = 'background: #ecfcf4;',
			text = text
		})
	end
end

return p