local XUiGridEquip = require("XUi/XUiEquipAwarenessReplace/XUiGridEquip")
local XUiPanelEquipScroll = XClass(nil, "XUiPanelEquipScroll")

--multiSelect复用
function XUiPanelEquipScroll:Ctor(rootUi, ui, gridTouchCb, gridReloadCb, multiSelect, gridSelectCheckCb)
    self.RootUi = rootUi
    self.GameObject = ui.gameObject
    self.Transform = ui.transform
    self.GridTouchCb = gridTouchCb
    self.GridReloadCb = gridReloadCb
    self.MultiSelect = multiSelect
    self.GridSelectCheckCb = gridSelectCheckCb
    self:InitDynamicTable()
end

function XUiPanelEquipScroll:InitDynamicTable()
    self.DynamicTable = XDynamicTableNormal.New(self.GameObject)
    self.DynamicTable:SetDelegate(self)
    self.DynamicTable:SetProxy(XUiGridEquip)
    self.LastSelectIds = {}
end

function XUiPanelEquipScroll:UpdateEquipGridList(equipIdList, notResetSelect)
    if not notResetSelect then
        self.LastSelectIds = {}
    end
    self.EquipIdList = equipIdList or {}
    self.DynamicTable:UpdateViewSize()
    self.DynamicTable:SetDataSource(self.EquipIdList)
    self.DynamicTable:ReloadDataSync(#self.EquipIdList > 0 and not notResetSelect and 1 or -1)
end

function XUiPanelEquipScroll:OnDynamicTableEvent(event, index, grid)
    if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
        grid:InitRootUi(self.RootUi)
    elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
        local equipId = self.EquipIdList[index]
        grid:Refresh(equipId, self.RootUi.SelectedEquipIdList)

        if self.LastSelectIds[equipId] then
            grid:SetSelected(true)
            self.LastSelectGrid = grid
        else
            grid:SetSelected(false)
        end
    elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
        local equipId = self.EquipIdList[index]

        --不是多选
        if not self.MultiSelect and self.LastSelectGrid then
            self.LastSelectGrid:SetSelected(false)
        end

        local isSelected = grid:IsSelected()
        --不能选中return
        if not isSelected and self.GridSelectCheckCb and not self.GridSelectCheckCb() then
            return
        end

        --复选取消
        if self.MultiSelect then
            isSelected = not isSelected
        else
            isSelected = true
        end

        --普通选中时清除上一条记录
        if not self.MultiSelect and self.LastSelectId then
            self.LastSelectIds[self.LastSelectId] = nil
        end

        self.LastSelectId = equipId
        self.LastSelectIds[self.LastSelectId] = isSelected

        self.LastSelectGrid = grid
        self.LastSelectGrid:SetSelected(isSelected)

        if self.GridTouchCb then
            self.GridTouchCb(equipId, isSelected)
        end
    elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RELOAD_COMPLETED then
        if self.GridReloadCb then
            self.GridReloadCb()
        end
    end
end

function XUiPanelEquipScroll:SelectGrids(equipIds)
    self.LastSelectIds = equipIds
    self.DynamicTable:ReloadDataSync(#self.EquipIdList > 0 and 1 or -1)
end

function XUiPanelEquipScroll:ResetSelectGrids()
    self.LastSelectIds = {}
    self.LastSelectGrid = nil
    self.LastSelectId = nil
    self.DynamicTable:ReloadDataSync(#self.EquipIdList > 0 and 1 or -1)
end

function XUiPanelEquipScroll:ResetSelectGrid()
    if self.LastSelectGrid then
        self.LastSelectGrid:SetSelected(false)
        self.LastSelectGrid = nil
        self.LastSelectIds[self.LastSelectId] = nil
        self.LastSelectId = nil
    end
end

function XUiPanelEquipScroll:GuideGetDynamicTableIndex(id)
    for i, v in ipairs(self.EquipIdList) do
        local equip = XDataCenter.EquipManager.GetEquip(v)
        if tostring(equip.TemplateId) == id then
            return i
        end
    end

    return -1
end

return XUiPanelEquipScroll