AutoMaxImprovement = {}

AutoMaxImprovement.name = "AutoMaxImprovement"

function AutoMaxImprovement:Initialize()
    local zorig = SMITHING.improvementPanel.OnSlotChanged
    SMITHING.improvementPanel.OnSlotChanged = function (...)
        local SI = SMITHING.improvementPanel
        zorig(...)
        local hasItem = SI.improvementSlot:HasItem()
        if hasItem then
            local row = SI:GetRowForSelection()
            if row then
                local max = SI:FindMaxBoostersToApply()
                if max then
                    SI.spinner:SetValue(max)
                    -- we don't care about the return value, usually it occurs when upgraded stacked items
                end
            end
        end
    end
end

function AutoMaxImprovement.OnAddOnLoaded(event, addonName)
  if addonName == AutoMaxImprovement.name then
    AutoMaxImprovement:Initialize()
  end
end

EVENT_MANAGER:RegisterForEvent(AutoMaxImprovement.name, EVENT_ADD_ON_LOADED, AutoMaxImprovement.OnAddOnLoaded)