using System;
using System.Collections.Generic;
using Excel2Json;
using Fort23.Core;
using Fort23.UTool;
using GameLogic.Hero;
using Utility;
namespace Fort23.Mono
{
    public class RedDotData
    {
        /// 
        /// 具体Id
        /// 
        public int Id;
        /// 
        /// 红点组ID
        /// 
        public int GroupId;
        /// 
        /// 当前红点所属于层级 1级为最上层 
        /// 
        public int Layer;
        /// 
        /// 是否已经激活
        /// 
        private bool _isEnable;
        public bool isEnable
        {
            get { return _isEnable; }
            set { _isEnable = value; }
        }
        public int EnableId;
        public void Update()
        {
            switch (GroupId)
            {
                //上阵的功法可以升级显示红点
                case 1:
                    isEnable = false;
                    switch (EnableId) 
                    {
                        case 0: //没有自己的红点逻辑根据下层红点来决定
                            isEnable = RedDotManager.Instance.AllRedDotGroupData[GroupId].TargetLayerIsEnable(Layer);
                            break;
                        case 1:
                            foreach (var _skillInfo in PlayerManager.Instance.GongFaControl.allUseSkill)
                            {
                                if (RedDotManager.Instance.isSkillUpgrade(_skillInfo))
                                {
                                    isEnable = true;
                                    return;
                                }
                            }
                            break;
                    }
                    break;
                //境界升级
                case 5: 
                    isEnable = false;
                    switch (EnableId) 
                    {
                        case 0: //没有自己的红点逻辑根据下层红点来决定
                            isEnable = RedDotManager.Instance.AllRedDotGroupData[GroupId].TargetLayerIsEnable(Layer);
                            break;
                        case 1:
                            int currentMiao =
                                (int)((TimeHelper.ClientNow() - PlayerManager.Instance.myHero.heroData.upTime) /
                                      1000);
                            float allexp = currentMiao * PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei;
                            if (PlayerManager.Instance.myHero.heroData.exp + allexp <
                                PlayerManager.Instance.myHero.powerUpConfig.levelUpExp)
                            {
                                isEnable = false;
                                return;
                            }
                            int redDotID = 5;
                            AccountFileInfo.RedDot redDot = RedDotManager.Instance.GetRedDot(redDotID);
                            HeroInfo heroInfo = PlayerManager.Instance.myHero.CopyHero();
                            heroInfo.InitHero(PlayerManager.Instance.myHero.heroData.heroModelId,
                                PlayerManager.Instance.myHero.heroData.heroPowerId + 1);
                            if (PlayerManager.Instance.myHero.powerUpConfig.jingjie1 == heroInfo.powerUpConfig.jingjie1)
                            {
                                //小突破
                                if (PlayerManager.Instance.myHero.powerUpConfig.jingjie2 ==
                                    heroInfo.powerUpConfig.jingjie2)
                                {
                                    isEnable = true;
                                    return;
                                }
                                //大突破
                                else
                                {
                                    for (var i = 0;
                                         i < PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs.Length;
                                         i++)
                                    {
                                        if (!PlayerManager.Instance.BagController.IsEnough(
                                                PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs[i], 1))
                                        {
                                            isEnable = false;
                                            return;
                                        }
                                    }
                                    //当前升级已经查看了也不显示红点
                                    if (redDot != null &&
                                        redDot.Params.Contains(
                                            PlayerManager.Instance.myHero.powerUpConfig.ID.ToString()))
                                    {
                                        isEnable = false;
                                        return;
                                    }
                                }
                            }
                            //渡劫
                            else
                            {
                                for (var i = 0;
                                     i < PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs.Length;
                                     i++)
                                {
                                    if (!PlayerManager.Instance.BagController.IsEnough(
                                            PlayerManager.Instance.myHero.powerUpConfig.DujieMustItemIDs[i], 1))
                                    {
                                        isEnable = false;
                                        return;
                                    }
                                }
                                //当前升级已经查看了也不显示红点
                                if (redDot != null &&
                                    redDot.Params.Contains(PlayerManager.Instance.myHero.powerUpConfig.ID.ToString()))
                                {
                                    isEnable = false;
                                    return;
                                }
                            }
                            isEnable = true;
                            break;
                    }
                    break;
                case 7: //具上的代金卷可以免费抽
                    isEnable = false;
                    switch (EnableId) //具体出现条件
                    {
                        case 0: //没有自己的红点逻辑根据下层红点来决定
                            isEnable = RedDotManager.Instance.AllRedDotGroupData[GroupId].TargetLayerIsEnable(Layer);
                            break;
                        case 1:
                            AccountFileInfo.SummonData summonData =
                                PlayerManager.Instance.SummonManager.summonDataMap[1];
                            OpenBoxConfig openBoxConfig = ConfigComponent.Instance.Get(1);
                            //有免费次数,并且让到时间了就免费抽
                            if (summonData.tenFreeCount < openBoxConfig.oneConsumeFreePara_1[1] &&
                                PlayerManager.Instance.serverTime >= summonData.nextTenFreeTime)
                            {
                                isEnable = true;
                                return;
                            }
                            isEnable = false;
                            break;
                    }
                    break;
                case 8: //法宝可以升级或者有新槽位
                    isEnable = false;
                    switch (EnableId) //具体出现条件
                    {
                        case 0: //没有自己的红点逻辑根据下层红点来决定
                            isEnable = RedDotManager.Instance.AllRedDotGroupData[GroupId].TargetLayerIsEnable(Layer);
                            break;
                        case 1:
                            for (int i = 0; i < 4; i++)
                            {
                                FaBaoInfo faBaoInfo = PlayerManager.Instance.FaBaoControl.FightFaBao[i];
                                if (RedDotManager.Instance.IsFabaoUpgrade1(i, faBaoInfo))
                                {
                                    isEnable = true;
                                    return;
                                }
                            }
                            break;
                    }
                    break;
                case 11: //挂机奖励大于300分钟
                    isEnable = false;
                    switch (EnableId) //具体出现条件
                    {
                        case 0: //没有自己的红点逻辑根据下层红点来决定
                            isEnable = RedDotManager.Instance.AllRedDotGroupData[GroupId].TargetLayerIsEnable(Layer);
                            break;
                        case 1:
                            if (AccountFileInfo.Instance.playerData.QiankundaiLingQuAwardTime == 0)
                            {
                                isEnable = true;
                                return;
                            }
                            int miao = (int)((PlayerManager.Instance.serverTime -
                                              AccountFileInfo.Instance.playerData.QiankundaiLingQuAwardTime) / 1000);
                            if (miao >= 300)
                            {
                                isEnable = true;
                            }
                            break;
                    }
                    break;
            }
        }
    }
}