Mô đun:Tropical cyclone season effects

-- Được sử dụng cho các bài viết mùa xoáy thuận nhiệt đới.
local invocation = require('Mô đun:Template invocation').invocation
local getArgs = require('Mô đun:Arguments').getArgs
local yesno = require('Mô đun:Yesno')
local dateperiod = require('Mô đun:Date period')._main
local Date = require('Mô đun:Date')._Date
local p = {}
function p.main(frame)
	local args = getArgs(frame, {
		trim = true,
		removeBlanks = false
	})
return p._main(frame, args)
end
function p._main(frame, args)
	if not yesno(args"no-header") and (args"Basin" or args"basin") == nil then
		error("Lưu vực không được chỉ định")
	elseif not yesno(args"no-header") and (args"start-year" or args"year") == nil then
		error("Năm (hoặc năm bắt đầu) không được chỉ định")
	elseif not yesno(args"no-header") and args"start-year" == nil and args"end-year" ~= nil then
		error("Năm kết thúc được chỉ định nhưng năm bắt đầu không được chỉ định")
	end
	
local tableEntries = args1 or ""

local totalStorms = 0
local strongestWinds = 0
local tableWindsUnit = nil
local lowestPressure = 2000
local tablePressureUnit = nil
local totalDamages = 0
local totalDeaths = 0

local earliestFormed = nil;
local earliestFormedDate = nil;
local latestDissipated = nil;
local latestDissipatedDate = nil;
for name, formed, dissipated, winds, windsUnit, pressure, pressureUnit, damages, deaths in string.gmatch(
	tableEntries,
	'data%-tcse%-entry="(+)|(%w%-+)|(%w%-+)|(%d%.+)|(%w+)|(%d%.+)|(%w+)|(%d%.+)|(%d+)"'
	) do
	    totalStorms = totalStorms + 1
	    
	if latestDissipated ~= "đến nay" then
		if dissipated == "đến nay" then
	    		latestDissipated = "đến nay"
	    	elseif latestDissipated == nil or latestDissipatedDate == nil then
			latestDissipated = dissipated
			latestDissipatedDate= Date(dissipated)
	    	elseif latestDissipatedDate.gsd  Date(formed).gsd then
		    earliestFormed = formed
		    earliestFormedDate = Date(formed)
		end
	
	    if tableWindsUnit == nil then
	    	tableWindsUnit = windsUnit
	elseif windsUnit ~= tableWindsUnit then
		error("Đơn vị gió của một cơn bão không trùng với đơn vị gió của tất cả các cơn bão")
		end
	    if tablePressureUnit == nil then
	    	tablePressureUnit = pressureUnit
	elseif pressureUnit ~= tablePressureUnit then
		error("Đơn vị áp suất của một cơn bão không trùng với đơn vị áp suất của tất cả các cơn bão")
	end
	    if strongestWinds == nil or strongestWinds  tonumber(pressure) then
	    	lowestPressure = tonumber(pressure)
	end
	    
totalDamages = totalDamages + tonumber(damages)
totalDeaths = totalDeaths + tonumber(deaths)

	end
	local tcHeader = frame:expandTemplate{
		title = "Tropical cyclone season effects (top)",
		args = {
			"no-sort" = totalStorms == 0 and "yes" or nil,
			"no-header" = args"no-header",
			"basin" = args"basin",
			"start-year" = args"start-year" or args"year",
			"end-year" = args"end-year",
			"currency-link" = args"currency-link"
		}
	}
	-- Template parameters not yet standardized. Hence the usage of capitalized
	-- parameter names.
local tcFooter = frame:expandTemplate{
	title = "Tropical cyclone season effects (bottom)",
	args = {
			"TC's" = "Hệ thống " .. totalStorms .. (totalStorms == 1 and "" or ""),
			"dates" = totalStorms == 0 and "Mùa chưa bắt đầu" or
				dateperiod(
					earliestFormed, 
					(latestDissipated == "đến nay" or yesno(args"active")) 
					    and "Mùa đang diễn ra" or latestDissipated,
					(latestDissipated == "đến nay" or yesno(args"active"))
						and nil or true
				),
			"winds" = totalStorms == 0 and "" or
				(
					tableWindsUnit == "kn" and (
						frame:expandTemplate{
							title = "convert",
							args = {
								strongestWinds, 
								tableWindsUnit,
								args"winds-target" or "kph",
								round = "5",
								abbr = "on",
								disp = "out"
							}
						} .. (args"winds-target2" ~= "none" and " (" .. frame:expandTemplate{
							title = "convert",
							args = {
								strongestWinds, 
								tableWindsUnit,
								args"winds-target2" or "mph",
								round = "5",
								abbr = "on",
								disp = "out"
							}
						} .. ")" or "")
					) or frame:expandTemplate{
						title = "convert",
						args = {
							strongestWinds, 
							tableWindsUnit,
							args"winds-target" or "",
							round = "5",
							abbr = "on"
						}
					}
				),
			"pres" = totalStorms == 0 and "" or
				frame:expandTemplate{
					title = "convert",
					args = {
						lowestPressure, 
						tablePressureUnit,
						args"pressure-target" or "inHg",
						comma = "off",
						sigfig = 4,
						abbr = "on"
					}
				},
			"damage" = totalStorms == 0 and "" or
				frame:expandTemplate{
					title = totalDamages == 0 and "nts" or "ntsp",
					args = { totalDamages, "", totalDamages ~= 0 and (args"currency-symbol" or "$") }
				},
			"deaths" = totalStorms == 0 and "" or 
				frame:expandTemplate{
					title = "nts",
					args = { totalDeaths }
				},
			"Refs" = args"footer-refs" or ""
		}
	}
	
	return tcHeader .. "\n" .. tableEntries .. "\n" .. tcFooter
end
return p