-- Clone the current uniform template in the military screen.
--[[=begin

gui/clone-uniform
=================
Bind to a key (the example config uses :kbd:`Ctrl`:kbd:`C`), and activate in the Uniforms
page of the military screen with the cursor in the leftmost list.

When invoked, the script duplicates the currently selected uniform template,
and selects the newly created copy.

=end]]
local utils = require 'utils'
local gui = require 'gui'

local entity = df.global.ui.main.fortress_entity

local args = {...}
local vs = dfhack.gui.getCurViewscreen()
local vstype = df.viewscreen_layer_militaryst
if not vstype:is_instance(vs) then
    qerror('Call this from the military screen')
end

local slist = vs.layer_objects[0]

if vs.page == vstype.T_page.Uniforms
and slist.active and slist.num_entries > 0
and not vs.equip.in_name_uniform
then
    local idx = slist.num_entries

    if #vs.equip.uniforms ~= idx or #entity.uniforms ~= idx then
        error('Uniform vector length mismatch')
    end

    local uniform = vs.equip.uniforms[slist:getListCursor()]

    local ucopy = uniform:new()
    ucopy.id = entity.next_uniform_id
    ucopy.name = ucopy.name..'(Copy)'

    for k,v in ipairs(ucopy.uniform_item_info) do
        for k2,v2 in ipairs(v) do
            v[k2] = v2:new()
        end
    end

    entity.next_uniform_id = entity.next_uniform_id + 1
    entity.uniforms:insert('#',ucopy)
    vs.equip.uniforms:insert('#',ucopy)

    slist.num_entries = idx+1
    slist.cursor = idx-1
    gui.simulateInput(vs, 'STANDARDSCROLL_DOWN')
else
    qerror('Call this with a uniform selected on the Uniforms page of military screen')
end