--------------------------------------------------------------------------------
-- This module holds extra link functions for use with [[Module:UserLinks]].
--
-- It is intended for experimenting with new link functions that will eventually
-- be added to the main module code.
--
-- Since this module is transcluded in only a small number of pages, changes
-- should cause little server overhead and should propagate quickly.
--
-- Link functions using the same link code as a function in the main module will
-- be ignored; please give your function a unique code.
--------------------------------------------------------------------------------

-- Load shared helper functions
local mShared = require('Module:UserLinks/shared')
local raiseError = mShared.raiseError
local makeWikitextError = mShared.makeWikitextError
local makeWikilink = mShared.makeWikilink
local makeUrlLink = mShared.makeUrlLink
local makeFullUrlLink = mShared.makeFullUrlLink
local message = mShared.message

local linkFunctions = {}

function linkFunctions.coibot(snippets)
	-- COIBot report
	return makeWikilink(
		nil,
		4,
		'WikiProject Spam/UserReports/' .. snippets.username,
		'COIBot'
	)
end

function linkFunctions.ggl(snippets)
	-- Google search for the username
	return makeUrlLink(
		{
			host = 'www.google.com',
			path = '/search',
			query = {q = snippets.username},
		},
		'Google'
	)
end

function linkFunctions.http(snippets)
	-- To see if an IP is serving a web page
	return makeUrlLink(
		{
			protocol = 'http',
			host = snippets.username
		},
		'http'
	)
end

function linkFunctions.msg(snippets)
	-- New message on user talk page
	return makeFullUrlLink(
		snippets.interwiki,
		3,
		snippets.username,
		{
			action = 'edit',
			section = 'new',
		},
		'留言'
	)
end

function linkFunctions.rbl(snippets)
	-- Realtime blacklists
	return makeUrlLink(
		{
			protocol = 'https',
			host = 'www.robtex.com',
			path = '/rbls/' .. snippets.username .. '.html',
		},
		'RBLs'
	)
end

function linkFunctions.rdns(snippets)
	-- Reverse DNS lookup
	return makeUrlLink(
		{
			protocol = 'http',
			host = 'www.dnswatch.info',
			path = '/dns/dnslookup',
			query = {
				la = 'en',
				host = snippets.username,
				submit = 'Resolve'
			}
		},
		'RDNS'
	)
end

function linkFunctions.sbx(snippets)
	-- User sandbox
	return makeWikilink(
		snippets.interwiki,
		2,
		snippets.username .. '/sandbox',
		'沙盒'
	)
end

function linkFunctions.sfs(snippets)
	-- StopForumSpam
	return makeUrlLink(
		{
			protocol = 'http',
			host = 'www.stopforumspam.com',
			path = '/search/' .. snippets.username,
		},
		'StopForumSpam'
	)
end

function linkFunctions.sul2(snippets)
	-- Global contribs, Luxo's tool
	return makeUrlLink(
		{
			host = 'tools.wmflabs.org',
			path = '/guc/index.php',
			query = {
				user = snippets.username,
				lang = snippets.toolLang
			}
		},
		'全域貢獻'
	)
end

function linkFunctions.uc(snippets)
	-- User creation
	return makeWikilink(
		snippets.interwiki,
		-1,
		'Log/newusers/' .. snippets.username,
		'user creation'
	)
end

function linkFunctions.whois(snippets)
	-- WHOIS information for IPs
	return makeUrlLink(
		{
			protocol = 'https',
			host = 'www.robtex.com',
			path = '/ip/' .. snippets.username .. '.html',
			fragment = 'whois'
		},
		'WHOIS'
	)
end

function linkFunctions.wlh(snippets)
	-- Links to user page (what links here)
	return makeWikilink(
		snippets.interwiki,
		-1,
		'WhatLinksHere/'
			.. mw.site.namespaces[2].name
			.. ':'
			.. snippets.username,
		'links to user page'
	)
end

function linkFunctions.cr(snippets)
	-- Change rights
	return makeWikilink(
		snippets.interwiki,
		-1,
		'UserRights/' .. snippets.username,
		'變更權限'
	)
end

return {linkFunctions = linkFunctions}