local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
local XUiTransfiniteBattlePrepareGridHead = require("XUi/XUiTransfinite/Main/XUiTransfiniteBattlePrepareGridHead")
local XViewModelTransfiniteRoom = require("XEntity/XTransfinite/ViewModel/XViewModelTransfiniteRoom")

---@class XUiTransfiniteBattlePrepare:XLuaUi
local XUiTransfiniteBattlePrepare = XLuaUiManager.Register(XLuaUi, "UiTransfiniteBattlePrepare")

function XUiTransfiniteBattlePrepare:Ctor()
    ---@type XViewModelTransfiniteRoom
    self._ViewModel = XViewModelTransfiniteRoom.New()
end

function XUiTransfiniteBattlePrepare:OnAwake()
    local root = self.UiModelGo.transform
    self.UiModelParent = root:FindTransform("PanelRoleModel")
    ---@type XUiPanelRoleModel
    self.RoleModel = XUiPanelRoleModel.New(self.UiModelParent)
    ---@type
    self._BtnAffix = { self.BtnAffix1, self.BtnAffix2, self.BtnAffix3 }
    if not self.ImgGift then
        self.ImgGift = XUiHelper.TryGetComponent(self.Transform, "SafeAreaContentPane/PanelGift/ImgGiftBg/ImgGift", "RawImage")
    end
    if not self.TxtLock then
        self.TxtLock = XUiHelper.TryGetComponent(self.PanelLock, "TxtLock", "Text")
    end
    if not self.PanelDrag then
        self.PanelDrag = XUiHelper.TryGetComponent(self.Transform, "SafeAreaContentPane/PanelDrag", "XDrag")
    end

    ---@type XUiTransfiniteBattlePrepareGridHead[]
    self._GridCharacter = {
        XUiTransfiniteBattlePrepareGridHead.New(self.PanelHero2),
        XUiTransfiniteBattlePrepareGridHead.New(self.PanelHero1),
        XUiTransfiniteBattlePrepareGridHead.New(self.PanelHero3),
    }
    for i = 1, #self._GridCharacter do
        local grid = self._GridCharacter[i]
        self:RegisterClickEvent(grid.BtnEmpty, self.OnClickTeam)
    end

    self:BindExitBtns()
    self:RegisterClickEvent(self.BtnLeft, self.OnClickLeft)
    self:RegisterClickEvent(self.BtnRight, self.OnClickRight)
    self:RegisterClickEvent(self.BtnResetting, self.OnClickReset)
    self:RegisterClickEvent(self.PaneHeroInformation, self.OnClickTeam)
    self:RegisterClickEvent(self.BtnWeather, self.OnClickEnvironment)
    self:RegisterClickEvent(self.Btn, self.OnClickScore)
    self.BtnBattle.CallBack = function()
        self:OnClickFight()
    end

    ---@type XUiGridCommon
    --self._GridReward = XUiGridCommon.New(self, self.GridReward)

    ---@type XUiGridCommon
    --self._GridRewardExtra = XUiGridCommon.New(self, self.GridRewardExtra)

    self._ViewModel:OnAwake()
end

function XUiTransfiniteBattlePrepare:OnStart(stageGroup)
    if stageGroup then
        self._ViewModel:SetStageGroup(stageGroup)
    end
end

function XUiTransfiniteBattlePrepare:OnEnable()
    XEventManager.AddEventListener(XEventId.EVENT_TRANSFINITE_UPDATE_ROOM, self.Update, self)
    self._ViewModel:OnEnable()
    self:Update()
end

function XUiTransfiniteBattlePrepare:OnDisable()
    XEventManager.RemoveEventListener(XEventId.EVENT_TRANSFINITE_UPDATE_ROOM, self.Update, self)
end

function XUiTransfiniteBattlePrepare:Update(resetIndex)
    self._ViewModel:Update(resetIndex)
    local data = self._ViewModel.Data
    local modelName = data.BossModel
    self.RoleModel:UpdateRoleModel(modelName, nil, self.Name, function(model)
        self.PanelDrag.Target = model.transform
    end, nil, true)
    self.TxtBattleTime.text = data.Time
    self.BtnBattle:SetNameByGroup(0, data.Progress)

    self.ImgAddedRewardTitleBg.gameObject:SetActiveEx(data.IsStageReward)
    self.ImgNormalTitleBg.gameObject:SetActiveEx(data.IsStageNormal)
    self.ImgBossTitleBg.gameObject:SetActiveEx(data.IsStageHidden)

    self.BtnRight.gameObject:SetActiveEx(data.IsEnableRightArrow)
    self.BtnLeft.gameObject:SetActiveEx(data.IsEnableLeftArrow)

    local eventList = data.Event
    for i = 1, #self._BtnAffix do
        local btn = self._BtnAffix[i]
        local dataEvent = eventList[i]
        if dataEvent then
            btn.gameObject:SetActiveEx(true)
            btn:SetNameByGroup(0, dataEvent.Name)
            btn:SetRawImage(dataEvent.Icon)
            self:RegisterClickEvent(btn, function()
                self:OnClickBuff(dataEvent)
            end, true)
        else
            btn.gameObject:SetActiveEx(false)
        end
    end

    --self._GridReward:Refresh(data.Reward)
    --self._GridReward:SetCount(data.RewardAmount)
    --self._GridRewardExtra:Refresh(data.ExtraReward)
    --self._GridRewardExtra:SetCount(data.ExtraRewardAmount)

    --self.PanelNow.gameObject:SetActiveEx(data.IsStageCurrent)
    self.PanelLock.gameObject:SetActiveEx(data.IsStageLock)
    if data.IsStageLock then
        self.TxtLock.text = data.TxtStageLock
    end
    self.PanelComplete.gameObject:SetActiveEx(data.IsStagePassed)

    if not data.IsStageCurrent then
        self.BtnBattle:SetDisable(true, false)
    else
        self.BtnBattle:SetDisable(false)
    end

    local members = data.Members
    for i = 1, #self._GridCharacter do
        local grid = self._GridCharacter[i]
        local dataMember = members[i]
        grid:Update(dataMember)
    end

    self.TxtTips.gameObject:SetActiveEx(data.IsTeamEmpty)

    self.TxtGiftNumber.text = data.Score

    if self.TxtAddedRewardTitle then
        if data.ExtraRewardTime > 0 then
            self.TxtAddedRewardTitle.text = XUiHelper.GetText("TransfiniteTimeExtra3", data.ExtraRewardTime)
            self.TxtAddedRewardTitle.gameObject:SetActiveEx(true)
            self.PanelRewardTitle.gameObject:SetActiveEx(true)
        else
            self.TxtAddedRewardTitle.gameObject:SetActiveEx(false)
            self.PanelRewardTitle.gameObject:SetActiveEx(false)
        end
    end

    self.ImgGift:SetRawImage(data.ImgScore)
end

function XUiTransfiniteBattlePrepare:OnClickLeft()
    self._ViewModel:MoveLeft()
    self:Update()
    self:PlayAnimation("QieHuan")
end

function XUiTransfiniteBattlePrepare:OnClickRight()
    self._ViewModel:MoveRight()
    self:Update()
    self:PlayAnimation("QieHuan")
end

function XUiTransfiniteBattlePrepare:OnClickReset()
    self._ViewModel:OnClickReset()
end

function XUiTransfiniteBattlePrepare:OnClickTeam()
    self._ViewModel:OnClickMember()
end

function XUiTransfiniteBattlePrepare:OnClickFight()
    self._ViewModel:OnClickFight()
end

function XUiTransfiniteBattlePrepare:OnClickEnvironment()
    self._ViewModel:OnClickEnvironment()
end

---@param data XViewModelTransfiniteRoomEvent
function XUiTransfiniteBattlePrepare:OnClickBuff(data)
    XLuaUiManager.Open("UiReformBuffDetail", {
        Name = data.Name,
        Icon = data.Icon,
        Description = data.Desc,
    })
end

function XUiTransfiniteBattlePrepare:OnClickScore()
    local itemId = XDataCenter.ItemManager.ItemId.TransfiniteScore
    local item = XDataCenter.ItemManager.GetItem(itemId)
    XLuaUiManager.Open("UiTip", item)
end

return XUiTransfiniteBattlePrepare