--------------------------------------------------------------------------------
-- 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,
		' '
	)
end

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

function linkFunctions.http(snippets)
	-- To see if an IP is serving a web page

	local host = snippets.username
	if not host:match('^%d+%.%d+%.%d+%.%d+$') then
		if host:match('^[%x:]+$') then
			-- It's IPv6, use RFC 3986 IP-Literal syntax
			host = '[' .. host .. ']'
		else
			-- It's neither IPv4 nor IPv6, return nothing
			return ''
		end
	end

	return makeUrlLink(
		{
			protocol = 'http',
			host = host
		},

		'بروتوكول 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 = '/ip-lookup/' .. snippets.username .. '#dnsbl',
		},
		'بحث BLs'
	)
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'
			}
		},
		'بحث DNS'
	)
end

function linkFunctions.sbx(snippets)
	-- User sandbox
	return makeWikilink(
		snippets.interwiki,
		2,
		snippets.username .. '/ملعب',
		'ملعب'
	)
end

function linkFunctions.sfs(snippets)
	-- StopForumSpam
	return makeUrlLink(
		{
			protocol = 'http',
			host = 'www.stopforumspam.com',
			path = '/search/' .. snippets.username,
		},
		'منتدى منع السبام'
	)
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,
		'سجل إنشاء المستخدم'
	)
end

function linkFunctions.whois(snippets)
	-- WHOIS information for IPs
	return makeUrlLink(
		{
			protocol = 'https',
			host = 'tools.wmflabs.org',
			path = '/whois/gateway.py',
			query = {
				lookup = 'true',
				ip = snippets.username,
			},
		},
		'بحث بوابة 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,
		'ما يصل إلى صفحة المستخدم'
	)
end

function linkFunctions.cr(snippets)
	-- Change rights
	return makeWikilink(
		snippets.interwiki,
		-1,
		'UserRights/' .. snippets.username,
		'تغييرات الصلاحيات'
	)
end

return {linkFunctions = linkFunctions}