Mô đun:Tiến độ giải thưởng phục vụ

local navbar = require('Module:Navbar')._navbar
local mm = require('Module:Math')
local p = {}
local function stripToNil(text)
	-- If text is a string, return its trimmed content, or nil if empty.
	-- Otherwise return text (which may, for example, be nil).
	if type(text) == 'string' then
		text = text:match('(%S.-)%s*$')
	end
	return text
end
local function progressBar(current, total)
	local percentDone = mm._round(current / total * 100, 1)
	local leftBar = 
	local rightBar = 
	if percentDone >= 100 then
		leftBar = 100
		rightBar = 0
	else
		leftBar = current / total * 100
		rightBar = (100-current) / total * 100
	end
	local progBarText =  ..
			'Hoàn thành ' .. percentDone .. '%' ..
			 ..
			' ' ..
			' ' ..
			
	
	return progBarText
end
local levelNames = {
	'Sagacious Editor',
	'Ultimate Vanguard Editor',
	'Senior Vanguard Editor',
	'BTV Tiên Khởi',
	'BTV Bô lão Thượng cấp',
	'BTV Bô lão',
	'BTV Thượng cấp IV',
	'BTV Thượng cấp III',
	'BTV Thượng cấp II',
	'BTV Thượng cấp',
	'BTV Thâm niên III',
	'BTV Thâm niên II',
	'BTV Thâm niên',
	'Veteran Editor IV',
	'BTV Kỳ cựu III',
	'BTV Kỳ cựu II',
	'BTV Kỳ cựu',
	'BTV Kinh nghiệm',
	'BTV trung cấp, cấp độ 4',
	'BTV trung cấp, cấp độ 3',
	'BTV trung cấp, cấp độ 2',
	'BTV trung cấp',
	'BTV nghiệp dư, cấp độ 4',
	'BTV nghiệp dư, cấp độ 3',
	'BTV nghiệp dư, cấp độ 2',
	'BTV nghiệp dư',
	'BTV sơ cấp, cấp độ 4',
	'BTV sơ cấp, cấp độ 3',
	'BTV sơ cấp, cấp độ 2',
	'BTV sơ cấp',
	'BTV mới vào nghề, cấp độ 4',
	'BTV mới vào nghề, cấp độ 3',
	'BTV mới vào nghề, cấp độ 2',
	'BTV mới vào nghề',
	'BTV đã đăng kí, cấp độ 4',
	'BTV đã đăng kí, cấp độ 3',
	'BTV đã đăng kí, cấp độ 2',
	'BTV đã đăng kí',
	'Wikipedian',
}
local levelTime = {
	8035.5, 7305, 6574.5, 5844, 5113.5, 4383, 3652.4, 2922, 2556.7, 2191.5, 1826.2, 1643.6, 
	1461, 1278.4, 1095.7, 913.1, 730.5, 547.9, 501.75, 456.25, 410.75, 365.25, 
	319.1, 273.6, 228.1, 182.6, 160.3, 137.3, 114.3, 91.3, 75.5, 60.5, 45.5, 30.5, 
	24, 16, 8, 1, 0,
}
local levelEdits = {
	205000, 175000, 150000, 132000, 114000, 96000, 78000, 60000, 51000, 42000, 33000, 28500,
	24000, 20000, 16000, 12000, 8000, 6000, 5500, 5000, 4500, 4000, 3500, 3000, 2500, 
	2000, 1750, 1500, 1250, 1000, 800, 600, 400, 200, 150, 100, 50, 1, 0,
}
function p.serviceLevel(args)
	--Inputs
	local editorTime = tonumber(stripToNil(args.editorTime))
	local edits = tonumber(stripToNil(args.edits))
	local styleoverride = stripToNil(args.styleoverride)
	local genderoverride = stripToNil(args.genderoverride)
	local url = stripToNil(args.url)
	
	-- Other Variables
	local timeLevel =  -- Level associated with time
	local editLevel =  -- Level associated with edits
	local userLevel =  -- Full name of current user level
	local lowEdits =  -- Minimum number of edits for current user level
	local lowTime =  -- Minimum amount of time for current user level
	local highEdits =  -- Max number of edits for current user level
	local highTime =  -- Max amount of time for current user level
	local nextLevel =  -- Full name of next user level
	local fullMessage = '= levelTimex then
			timeLevel = x
			break
		end
	end
	-- Fine "level" of editor based on edits
	for y = 1, 39, 1 do
		if edits >= levelEditsy then
			editLevel = y
			break
		end
	end
	
	-- Set user level and the next level up
	if timeLevel == editLevel then
		if timeLevel == 1 then
			userLevel = levelNames1
			topLevel = true
		else
			userLevel = levelNameseditLevel
			nextLevel = levelNameseditLevel-1
			lowEdits = levelEditseditLevel
			highEdits = levelEditseditLevel-1
			lowTime = levelTimeeditLevel
			highTime = levelTimeeditLevel-1
			needsBoth = true
		end
	elseif timeLevel ' ..
					navbar({"Bản mẫu:Tiến độ giải thưởng phục vụ",style="float:right",mini=1}) ..
					'Hiện tại, biên tập viên này đã giành được giải thưởng ' .. userLevel .. ' .'
	if topLevel then
		fullMessage = fullMessage .. 'Đây là cấp độ cao nhất mà một biên tập viên có thể đạt được!'
	else
		fullMessage = fullMessage .. 'Để đạt đến cấp độ tiếp theo, ' .. nextLevel .. ', ' .. genderoverride .. ' phải đáp ứng '
		if needsBoth then
			fullMessage = fullMessage .. 'yêu cầu chỉnh sửa và thời gian.'
		elseif needsEdits then
			fullMessage = fullMessage .. 'yêu cầu chỉnh sửa.'
		else
			fullMessage = fullMessage .. 'yêu cầu thời gian.'
		end
	
		-- Second paragra / progress bars
		if displayall or needsBoth or needsEdits then
			fullMessage = fullMessage .. 'Tiến tới cấp độ tiếp theo (bằng cách chỉnh sửa):  ' ..
							 .. url .. ' ' ..
							(edits - lowEdits) .. ' / ' ..
							(highEdits - lowEdits) .. ' '
			fullMessage = fullMessage .. progressBar(edits - lowEdits, highEdits - lowEdits)
		end
		if displayall or needsBoth or needsTime then
			fullMessage = fullMessage .. 'Tiến tới cấp độ tiếp theo (theo thời gian):  ' ..
							(editorTime - lowTime) .. ' ngày / ' ..
							(highTime - lowTime) .. ' ngày '
			fullMessage = fullMessage .. progressBar(editorTime - lowTime, highTime - lowTime)
		end
		fullMessage = fullMessage .. 
	end
	return fullMessage
end
function p.main(frame)
	return p.serviceLevel(frame.args)
end
return p