Module:ImprovementTableKai

local BaseTable = require('Module:BaseTable') local Equipment = require('Module:Equipment') local Formatting = require('Module:Formatting') local ResourceIcons = require('Module:ResourceIcons') local Ship = require('Module:Ship')

local format = require('Module:StringInterpolation').format

local ImprovementTableKai = BaseTable{ _item_class = Equipment, _header_template = ${resources} ! style="text-align: center; padding: 5px;" | ★ ! style="text-align: center; padding: 5px;" | ${devmat} ! style="text-align: center; padding: 5px;" | ${screw} ! style="text-align: center; padding: 5px;" | S ! style="text-align: center; padding: 5px;" | M ! style="text-align: center; padding: 5px;" | T ! style="text-align: center; padding: 5px;" | W ! style="text-align: center; padding: 5px;" | T ! style="text-align: center; padding: 5px;" | F ! style="text-align: center; padding: 5px;" | S ! style="text-align: center; padding: 5px;" | Helper Ship, _column_cell_templates = { name = ${values.name} ${values.icon} ${values.japanese_name} },	_columns = { "input_output", "improvement_level", "development_material", "improvement_material", "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "helper_ships", },	_improvement_brackets = { 0,		6,		10	},	_basic_resources_label = "Improvement Cost: ", _consumed_equipment_label = " Consumes: ${list} ", _produced_equipment_label = " Produces: 1x ${icon}${name} ", _equipment_item = "${count}x ${icon}${name}", _material_cell_content = "${normal}/${slider}", _unavailable_color = "#f99", _available_color = "#aaebaa", _small_icon_size = "24x24px", }

function ImprovementTableKai:create_items_post self._custom_rows = {} local result = {} if #self._items == 1 then self._single_item = true end for _, item in ipairs(self._items) do		local products = item:improvement_products if products then if self._single_item then self._title_row = format{|+ ${icon}${name}, icon = Formatting:format_image{Formatting:format_equipment_icon(item:icon)}, name = Formatting:format_link(item:link)} else self._custom_rows[item:name] = format{ ${icon}${name} / ${resources}, icon = Formatting:format_image{Formatting:format_equipment_icon(item:icon)}, name = Formatting:format_link(item:link), resources = Formatting:format_resources(item:improvement_resources)} table.insert(result, item:name) end for _, product in ipairs(products) do				local ships = item:improvement_ships(product) local availability = {} local ship_data = {} for _, ship in ipairs(ships) do					availability[ship] = item:improvement_availability(product, ship) if type(ship) == "string" then ship_data[ship] = Ship(ship) end end local ships_to_skip = {[true] = true} local indexes_to_delete = {} for index, ship in ipairs(ships) do					if not ships_to_skip[ship] then local remodel_from = ship_data[ship]:remodel_from if ship_data[remodel_from] then local identical = true for day, possible in pairs(availability[ship]) do								if availability[remodel_from][day] ~= possible then identical = false end end if identical then ships_to_skip[ship] = true table.insert(indexes_to_delete, index) end end end end table.sort(indexes_to_delete, function(a,b) return a > b end) for _, index in ipairs(indexes_to_delete) do					table.remove(ships, index) end for _, stars in ipairs(self._improvement_brackets) do					table.insert(result, {item = item, product = product, stars = stars, ships = ships, ship_data = ship_data, availability = availability, resources = item:improvement_resources(false, product, stars), resources_x = item:improvement_resources(true, product, stars)}) end end end end self._items = result end

function ImprovementTableKai:input_output(row_data) local value = "-" if row_data.resources then local result = {} local consumed_equipment_table = row_data.resources.equipment or {} local consumed_equipment = {} for equip, count in pairs(consumed_equipment_table) do			local equipment = equip ~= true and Equipment(equip) or row_data.item table.insert(consumed_equipment, format{self._equipment_item, count = count, icon = Formatting:format_image{Formatting:format_equipment_icon_simple(equipment:icon), size = self._small_icon_size}, name = Formatting:format_link(equipment:link)}) end if #consumed_equipment > 0 then table.insert(result, format{self._consumed_equipment_label, list = table.concat(consumed_equipment, " ")}) end if row_data.stars == self._improvement_brackets[#self._improvement_brackets] and row_data.product then local product = Equipment(row_data.product) table.insert(result, format{self._produced_equipment_label, icon = Formatting:format_image{Formatting:format_equipment_icon_simple(product:icon), size = self._small_icon_size}, name = Formatting:format_link(product:link)}) end if #result > 0 then value = table.concat(result, " ") end end return {values = {value = value}, bg_color = self._transparent, text_align = self._center_align} end

function ImprovementTableKai:improvement_level(row_data) return {values = {value = row_data.stars}, bg_color = self._transparent, text_align = self._center_align} end

function ImprovementTableKai:development_material(row_data) if row_data.resources then return {values = {value = format{self._material_cell_content, normal = row_data.resources.devmat, slider = row_data.resources_x.devmat}}, bg_color = self._transparent, text_align = self._center_align} else return {values = {value = "-"}, bg_color = self._transparent, text_align = self._center_align} end end

function ImprovementTableKai:improvement_material(row_data) if row_data.resources then return {values = {value = format{self._material_cell_content, normal = row_data.resources.screw, slider = row_data.resources_x.screw}}, bg_color = self._transparent, text_align = self._center_align} else return {values = {value = "-"}, bg_color = self._transparent, text_align = self._center_align} end end

function ImprovementTableKai:sunday(row_data) return self:availability(row_data, "Sunday") end

function ImprovementTableKai:monday(row_data) return self:availability(row_data, "Monday") end

function ImprovementTableKai:tuesday(row_data) return self:availability(row_data, "Tuesday") end

function ImprovementTableKai:wednesday(row_data) return self:availability(row_data, "Wednesday") end

function ImprovementTableKai:thursday(row_data) return self:availability(row_data, "Thursday") end

function ImprovementTableKai:friday(row_data) return self:availability(row_data, "Friday") end

function ImprovementTableKai:saturday(row_data) return self:availability(row_data, "Saturday") end

function ImprovementTableKai:availability(row_data, day) local availability = {} local available = false for index, ship in ipairs(row_data.ships) do		if row_data.availability[ship][day] then available = true local ship_initial if ship ~= true then ship_initial = mw.ustring.sub(row_data.ship_data[ship]:name, 1, 1) else ship_initial = "✓" end table.insert(availability, ship_initial) else table.insert(availability, " ") end end return {values = {value = available and table.concat(availability, " ") or "✗"}, bg_color = available and self._available_color or self._unavailable_color, text_align = self._center_align} end

function ImprovementTableKai:helper_ships(row_data) local ships = {} for index, ship in ipairs(row_data.ships) do		if ship ~= true then table.insert(ships, Formatting:format_link(row_data.ship_data[ship]:link)) else table.insert(ships, "Any") end end return {values = {value = table.concat(ships, " ")}, bg_color = self._transparent, text_align = self._center_align} end

function ImprovementTableKai:start_rows if self._single_item then self._rows = {self._table_start, self._title_row, self._header} else self._rows = {self._table_start} end end

function ImprovementTableKai:create_table_prep self._header_icons = { devmat = ResourceIcons.devmat, screw = ResourceIcons.screw, }	for key, value in pairs(self._header_icons) do		self._header_icons[key] = Formatting:format_image{value, caption = Formatting:format_stat_name(key)} end end

function ImprovementTableKai:create_header if self._single_item then self._header_icons.resources = self._basic_resources_label .. Formatting:format_resources(self._items[1].item:improvement_resources) else self._header_icons.resources = "" end self._header = format(self._header_template, self._header_icons) end

function ImprovementTableKai:finish_rows if not self._single_item then table.insert(self._rows, self._row_starter) table.insert(self._rows, self._header_bottom or self._header) end table.insert(self._rows, self._table_end) end

ImprovementTableKai.create_data_rows = ImprovementTableKai.create_data_rows_merge_vertical

return ImprovementTableKai