local XUiEnterFight = XLuaUiManager.Register(XLuaUi, "UiEnterFight")

function XUiEnterFight:OnStart(type, name, dis, icon, rewardId, cb, stageId, areaId)
    self.Callback = cb
    self.RewardId = rewardId
    self.Items = {}
    self.StageId = stageId
    self.AreaId = areaId

    self:InitAutoScript()
    if type == XFubenExploreConfigs.NodeTypeEnum.Story then
        self:OnShowStoryDialog(name, dis, icon)
    elseif type == XFubenExploreConfigs.NodeTypeEnum.Stage then
        self:OnShowFightDialog(name, dis, icon)
    elseif type == XFubenExploreConfigs.NodeTypeEnum.Arena then
        self:OnShowArenaDialog()
    end
    self:UpdateReward()
end

function XUiEnterFight:OnGetEvents()
    return { XEventId.EVENT_ARENA_RESULT_AUTOFIGHT }
end

function XUiEnterFight:OnNotify(evt)
    if evt == XEventId.EVENT_ARENA_RESULT_AUTOFIGHT then
        self:OnShowArenaDialog()
    end
end

function XUiEnterFight:InitAutoScript()
    self:AutoAddListener()
end

function XUiEnterFight:AutoAddListener()
    self:RegisterClickEvent(self.BtnMaskB, self.OnBtnMaskBClick)
    self:RegisterClickEvent(self.BtnEnterStory, self.OnBtnEnterStoryClick)
    self:RegisterClickEvent(self.BtnEnterFight, self.OnBtnEnterFightClick)
    self:RegisterClickEvent(self.BtnEnterArena, self.OnBtnEnterArenaClick)
    self.BtnCannotAutoFight.CallBack = function()
        self:OnBtnCannotAutoFightClick()
    end

    self.BtnAutoFight.CallBack = function()
        self:OnBtnAutoFightClick()
    end
end

function XUiEnterFight:OnBtnMaskBClick()
    self:Close()
end

function XUiEnterFight:OnBtnEnterStoryClick()
    self:Close()
    self:OnCallback()
end

function XUiEnterFight:OnBtnEnterFightClick()
    self:Close()
    self:OnCallback()
end

function XUiEnterFight:OnBtnEnterArenaClick()
    self:Close()
    self:OnCallback()
end

function XUiEnterFight:OnBtnCannotAutoFightClick()
    --1.没有满分通关过
    if not XDataCenter.ArenaManager.IsCanAutoFightByStageId(self.StageId,self.AreaId) then
        XUiManager.TipText("ArenaCannotAutoFight")
        return
    end
    --2.满分通关过,但是现在已经满分了
    local score = XDataCenter.ArenaManager.GetArenaStageScore(self.AreaId, self.StageId)
    local config = XArenaConfigs.GetArenaStageConfig(self.StageId)
    local maxPoint = XArenaConfigs.GetMarkMaxPointById(config.MarkId)
    if score == maxPoint then
        XUiManager.TipText("ArenaMarkAlreadyMax")
        return
    end
end

function XUiEnterFight:OnBtnAutoFightClick()
    XDataCenter.ArenaManager.RequestAutoFight(self.AreaId, self.StageId)
end

function XUiEnterFight:OnShowStoryDialog(name, dis, icon)
    self.PanelStory.gameObject:SetActiveEx(true)
    self.PanelFight.gameObject:SetActiveEx(false)
    self.PanelArena.gameObject:SetActiveEx(false)

    self.TxtStoryName.text = name
    self.TxtStoryDec.text = dis
    self.RImgStory:SetRawImage(icon)
end

function XUiEnterFight:OnShowFightDialog(name, dis, icon)
    self.PanelFight.gameObject:SetActiveEx(true)
    self.PanelStory.gameObject:SetActiveEx(false)
    self.PanelArena.gameObject:SetActiveEx(false)

    self.TxtFightName.text = name
    self.TxtFightDec.text = string.gsub(dis, "\\n", "\n")
    self.RImgFight:SetRawImage(icon)
end

function XUiEnterFight:OnShowArenaDialog()
    self.PanelFight.gameObject:SetActiveEx(false)
    self.PanelStory.gameObject:SetActiveEx(false)
    self.PanelReward.gameObject:SetActiveEx(false)
    self.ImgGqdl.gameObject:SetActiveEx(false)
    self.PanelArena.gameObject:SetActiveEx(true)

    local score = XDataCenter.ArenaManager.GetArenaStageScore(self.AreaId, self.StageId)
    local config = XArenaConfigs.GetArenaStageConfig(self.StageId)
    local areaStageConfig = XArenaConfigs.GetArenaAreaStageCfgByAreaId(self.AreaId)
    self.TxtArenaDetail.text = ""
    for i,stageId in pairs(areaStageConfig.StageId) do
        if stageId == self.StageId and i == #areaStageConfig.StageId then
            self.TxtArenaDetail.text = areaStageConfig.Desc
        end
    end
    if score > 0 then
        self.TxtArenaScore.text = CS.XTextManager.GetText("ArenaHighDesc", score)
    else
        self.TxtArenaScore.text = score
    end

    if areaStageConfig.AutoFight[config.MarkId] == nil or areaStageConfig.AutoFight[config.MarkId] == 0 then
        self.BtnAutoFight.gameObject:SetActiveEx(false)
        self.BtnCannotAutoFight.gameObject:SetActiveEx(false)
    else
        local maxPoint = XArenaConfigs.GetMarkMaxPointById(config.MarkId)
        local isCurrentMaxMark = score == maxPoint
        if XDataCenter.ArenaManager.IsCanAutoFightByStageId(self.StageId,self.AreaId) and not isCurrentMaxMark then
            self.BtnAutoFight.gameObject:SetActiveEx(true)
            self.BtnCannotAutoFight.gameObject:SetActiveEx(false)
        else
            self.BtnAutoFight.gameObject:SetActiveEx(false)
            self.BtnCannotAutoFight.gameObject:SetActiveEx(true)
        end
    end

    self.RImgArena:SetRawImage(config.BgIconBig)
    self.ImgArenaDifficulty:SetRawImage(config.DifficuIocn)
    self.TxtArenatName.text = config.Name
end

function XUiEnterFight:UpdateReward()
    self.Grid128.gameObject:SetActiveEx(false)
    if self.RewardId and self.RewardId > 0 then
        self.ImgGqdl.gameObject:SetActiveEx(true)
        self.PanelReward.gameObject:SetActiveEx(true)
        local data = XRewardManager.GetRewardList(self.RewardId)
        data = XRewardManager.MergeAndSortRewardGoodsList(data)
        XUiHelper.CreateTemplates(self, self.Items, data, XUiGridCommon.New, self.Grid128, self.PanelReward, function(grid, gridData)
            grid:Refresh(gridData)
        end)
    else
        self.PanelReward.gameObject:SetActiveEx(false)
        self.ImgGqdl.gameObject:SetActiveEx(false)
    end
end

function XUiEnterFight:OnCallback()
    if self.Callback then
        self.Callback()
    end
end