using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
using Common.Utility.CombatEvent;
using Fort23.Core;
using GameLogic.Combat.Buff;
using GameLogic.Combat.CombatTool;
using GameLogic.Combat.Hero;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
namespace GameLogic.Combat.Skill
{
    /// 
    /// 幻花迷雾(当场上有木灵分身时触发)
    /// 身体摇动,天空散发出小小的花朵。木灵隐藏其中防御+{0}%,期间不在攻击,直到木灵之子全部死亡后的{1}秒消失
    /// 
    public class S9061 : SkillBasic
    {
        protected float _currTime;
        private bool _isUpdate;
        private BuffBasic _buffBasic;
        private long addDef;
        protected override void ProInitSkill()
        {
            CombatEventManager.Instance.AddEventListener(CombatEventType.HeroDie, HeroDie);
        }
        private void HeroDie(IEventData iEventData)
        {
            if (_isUpdate)
            {
                return;
            }
            HeroDieEventData heroHpUpdateEventData = iEventData as HeroDieEventData;
            SummonCombatHeroEntity summonCombatHeroEntity =
                heroHpUpdateEventData.combatHeroEntity as SummonCombatHeroEntity;
            if (summonCombatHeroEntity != null && summonCombatHeroEntity.ownerEntity == CombatHeroEntity)
            {
                CombatHeroEntity[] combatHeroEntities =
                    CombatController.currActiveCombat.CombatHeroController.GetHero(CombatHeroEntity.IsEnemy,out int maxCount);
                bool isOk = false;
                for (int i = 0; i < maxCount; i++)
                {
                    SummonCombatHeroEntity t = combatHeroEntities[i] as SummonCombatHeroEntity;
                    if (t != null)
                    {
                        isOk = true;
                        break;
                    }
                }
                if (isOk)
                {
                    return;
                }
                _isUpdate = true;
                _currTime = 0;
            }
        }
        protected override void ProDispose()
        {
            CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroDie, HeroDie);
        }
        protected override void ProUseSkill()
        {
            ActivationTimeLineData("9061");
            BuffInfo buffInfo = BuffInfo.GetBuffInfo(10261, -1, 1);
            _buffBasic = CombatHeroEntity.BuffControl.AddBuff(CombatHeroEntity, buffInfo);
            long defense = CombatHeroEntity.MaxCombatHeroInfo.defense.Value;
            addDef = CombatCalculateTool.Instance.GetVlaueRatioForLong(defense, effectValue[0]);
            CombatHeroEntity.CurrCombatHeroInfo.defense += addDef;
        }
        protected override void ProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
            ITimelineFxLogic timelineFxLogic,
            TriggerData triggerData, ISkillFeatures skillFeatures)
        {
            // float harmBl = 0;
            // b_1018 b1018 = targetEntity.combatHeroEntity.BuffControl.GetBuffBasicForType();
            // if (b1018 != null) //消耗一层感电,额外照成伤害
            // {
            //     harmBl += b1018.buffCount * effectValue[1];
            // }
            //
            // long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(CombatHeroEntity.CurrCombatHeroInfo.attack.Value,
            //     harmBl);
            //
            // HarmReturnInfo harmReturnInfo = CombatCalculateTool.Instance.Harm(CombatHeroEntity, targetEntity, v,
            //     AttType.Skill, triggerData,
            //     wuXingType, skillFeatures,
            //     HarmType.Default);
        }
        protected override void ProCombatUpdate(float time)
        {
            if (!_isUpdate)
            {
                return;
            }
            _currTime += time;
            if (_currTime >= effectValue[1])
            {
                _isUpdate = false;
                CombatHeroEntity.CurrCombatHeroInfo.defense -= addDef;
                if (_buffBasic != null)
                {
                    _buffBasic.DelectBuff();
                }
                // CombatHeroEntity.CombatHeroSkillControl.This().SkillTurntable.isStop = false;
            }
        }
    }
}