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

local Infobox = {}
local HF = require('Module:HF')
local lang = mw.language.new('en')

-- This avoids using the {{#if:{{{factionreq|}}}||}} ParserFunction.
local function isempty(s)
  local result = false
  if type(s) == "nil" then
    result = true
  elseif type(s) == "string" then
    if s == "" then
      result = true
    end
  elseif type(s) == "table" then
    if next(s) == nil then
      result = true
    end
  end
  return result
end

function Infobox.Factionreq( field, vars )
    -- Rather than ParserFunctions, try passing your variables this way. 
    local text = 'Requires '.. field.Requirement ..' rank of '.. field.Rank ..' or higher'
    if not isempty(field.Requirement) then
        -- Use mw.html for the best HTML output.
        local output = mw.html.create('span')
        :addClass('factionreq'):wikitext(text)
        return tostring(output)
    end
end  

-- replaces {{#if:{{{topspeed|}}}|{{{topspeed|?}}} m/s|---}} logic
function Infobox.Quantify( field, vars )
    local unit = field.Unit or ''
    local value = field.Value or field.Default or '?'
    if isempty(value) then 
        return '---'
    else
        return value .. ' ' .. unit
    end
end

function Infobox.Insurance( field, vars )
    -- replaces {{#if:{{{cost|}}}|{{formatnum:{{#expr:trunc({{formatnum:{{{cost|}}}|R}}*0.05)}}}} CR|}}
    local insurance = field.Cost or ''
    if not isempty(insurance) then
        return math.floor(tonumber(insurance) * 0.05) .. 'CR'
    else return ''
    end
end

function Infobox.Internals( field, vars )
    local matroska = nil
    local output = {}
    if not isempty(field.S1) then 
        table.insert(output, field.S1 .. 'x Size 1 ' .. 
            lang:plural( u, 'Compartment', 'Compartments'))
        matroska = true
    end
    if not isempty(field.S2) then 
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.S2 .. 'x Size 2 ' .. 
            lang:plural( u, 'Compartment', 'Compartments'))
        matroska = true
    end
    if not isempty(field.S3) then 
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.S3 .. 'x Size 3 ' .. 
            lang:plural( u, 'Compartment', 'Compartments'))
        matroska = true
    end
    if not isempty(field.S4) then 
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.S4 .. 'x Size 4 ' .. 
            lang:plural( u, 'Compartment', 'Compartments'))
        matroska = true
    end
    if not isempty(field.S5) then 
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.S5 .. 'x Size 5 ' .. 
            lang:plural( u, 'Compartment', 'Compartments'))
        matroska = true
    end
    if not isempty(field.S6) then 
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.S6 .. 'x Size 6 ' .. 
            lang:plural( u, 'Compartment', 'Compartments'))
        matroska = true
    end
    if not isempty(field.S7) then 
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.S7 .. 'x Size 7 ' .. 
            lang:plural( u, 'Compartment', 'Compartments'))
        matroska = true
    end
    if not isempty(field.S8) then 
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.S8 .. 'x Size 8 ' .. 
            lang:plural( u, 'Compartment', 'Compartments'))
        matroska = true
    end
    if not isempty(field.Reserved) then 
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.Reserved)
    end
end

function Infobox.Hardpoints( field, vars )
    --
    local u = field.Utility or 0
    local hplabel = lang:plural(u, 'Hardpoint', 'Hardpoints')
    local matroska = nil
    local output = {}
    if (u) then 
        table.insert(output, u .. 'x Utility ' .. lang:plural(u, 'Mount', 'Mounts'))
        matroska = true
    end
    if not isempty(field.S) then
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.S .. 'x Small ' .. hplabel)
        matroska = true
    end
    if not isempty(field.M) then
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.M .. 'x Medium ' .. hplabel)
        matroska = true
    end
    if not isempty(field.L) then
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.L .. 'x Large ' .. hplabel)
        matroska = true
    end
    if not isempty(field.H) then
        if (matroska) then table.insert(output, '<br />') end
        table.insert(output, field.H .. 'x Huge ' .. hplabel)
    end
    return table.concat( output )
end

return Infobox