Module:ClaimLister/FullLister

From Terra Invicta Official Wiki

Documentation for this module may be created at Module:ClaimLister/FullLister/doc

---
---Reads the Claim data files and presents them in readable formats, with additional calculated statistics.
---
---@module FullLister
local FullLister = {}

--region Dependencies
local IconModule = require('Module:Icon')
local RegionData = mw.loadData('Module:CSVReader/Region')
local ClaimData = mw.loadData('Module:CSVReader/Claim')
local FullData = mw.loadData('Module:ClaimLister/Full')
local RegionNameBuilder = require('Module:RegionLister/NameBuilder')
local NationNames = mw.loadData('Module:ENReader/Nation')
--endregion

--region Private constants
local ssub = string.sub
local slower = string.lower
local tinsert = table.insert
local tconcat = table.concat
--endregion

--region Private member variables
--none
--endregion

--region Private methods
--none
--endregion

--region Public methods
function FullLister.ListPresentNations()
	return FullLister.ListNations('2022')
end

function FullLister.List2026Nations()
	return FullLister.ListNations('2026')
end

function FullLister.ListFutureNations()
	return FullLister.ListNations('2070')
end

---@param campaignYear The start year of the campaign to show claims for. Defaults to 2022 if not specified
---@return table
function FullLister.ListNations(campaignYear)
	if not campaignYear then
		campaignYear = '2022'
	end
	
	local returnString = '{| class="wikitable sortable mw-collapsible" style="text-align: center;"'
	returnString = returnString .. '\n|-'
	returnString = returnString .. '\n! Nation<br>Alternate Name'
	returnString = returnString .. '\n! Subnations' 
	returnString = returnString .. '\n! Subregions'
	
	returnString = returnString .. '\n|-'
	
	for rowID, row in pairs(FullData[1]) do
		if ((ssub(rowID,1,4) == campaignYear) or (campaignYear == '2022' and ssub(rowID,1,2) ~= '20')) and ssub(rowID,-3) ~= 'ALN' then
			local unionFlag = IconModule.Icon({args={ssub(rowID,-3) .. 'U',size='25px'}})
			local unionName = NationNames['TINationTemplate.unionDisplayName.' .. ssub(rowID,-3)] or ''
			if unionName == '' or unionFlag == 'No such icon as "' .. slower(ssub(rowID,-3) .. 'U') .. '"' then
				unionFlag = ''
			end
			returnString = returnString .. '\n|' .. IconModule.Icon({args={ssub(rowID,-3),size='25px'}}) ..  '[[' .. ssub(rowID,-3) .. '|' .. (NationNames['TINationTemplate.displayName.' .. ssub(rowID,-3)] or rowID) .. ']]<br>' .. unionFlag .. unionName
			
			local subnations = {}
			local subregions = {}
			local subnationCount = 0
			local subregionCount = {0,0,0,0} --Total, Eco, Mine, Oil
			for subnationID, _ in pairs(row) do
				subnationCount = subnationCount + 1
				local subnationString = '[[' .. ssub(subnationID,-3) .. '|' .. (NationNames['TINationTemplate.displayName.' .. subnationID] or NationNames['TINationTemplate.displayName.' .. ssub(subnationID,6)] or subnationID) .. ']]'
				tinsert(subnations, subnationString)
			end
			for subregionID, _ in pairs(FullData[2][rowID]) do
				subregionCount[1] = subregionCount[1] + 1
				if RegionData[subregionID]['coreEco'] and RegionData[subregionID]['coreEco'] == 'true' then
					subregionCount[2] = subregionCount[2] + 1
				end
				if RegionData[subregionID]['mining'] and RegionData[subregionID]['mining'] == 'true' then
					subregionCount[3] = subregionCount[3] + 1
				end
				if RegionData[subregionID]['oilResource'] and RegionData[subregionID]['oilResource'] == 'true' then
					subregionCount[4] = subregionCount[4] + 1
				end
				tinsert(subregions, RegionNameBuilder.buildName({args={subregionID, rowID}}))
			end
			
			returnString = returnString .. '\n| Total: ' .. subnationCount .. '<br>' .. tconcat(subnations,' ● ')
			
			returnString = returnString .. '\n| Total: ' .. subregionCount[1] .. '<br>'
			returnString = returnString .. subregionCount[2] .. IconModule.Icon({args={'core economic region', bgcolor='DarkSlateGray'}})
			returnString = returnString .. subregionCount[3] .. IconModule.Icon({args={'resource region'}})
			returnString = returnString .. subregionCount[4] .. IconModule.Icon({args={'oil region'}})
			returnString = returnString .. '<br>' .. tconcat(subregions,' ● ')
			
	    	returnString = returnString .. '\n|-'
	    end
	end
	returnString = returnString .. '\n|}'
	return returnString
end


--endregion

return FullLister