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 OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
namespace GameLogic.Combat.Skill
{
    /// 
    /// 霜域新生(被动,只会生效一次) 凤凰在伤害还剩10%的时候会触发此技能,
    /// 凤凰身体冰冻住并有一层寒气笼罩,期间凤凰不在受到任何伤害,并慢慢回血,
    /// 直到恢复满,持续5秒左右吧,恢复满后凤凰所有灵根增加{0}。冰块爆开,
    /// 生成一个冲击波,对当前场上所有的弹道照成当前强度的强度攻击(强度不够的弹道会被摧毁),生成{1}枚冰锥冲向玩家,对玩家照成{2}伤害
    /// 
    public class S9013 : SkillBasic
    {
        protected BuffBasic BuffBasic;
        private bool isActiveFuHuo;
        private int count;
        private float _currTime;
        protected long addHp;
        protected override void ProActiveSkill()
        {
            count = 0;
            isActiveFuHuo = false;
            CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
        }
        private void HeroInjured(IEventData data)
        {
            if (count > 0)
            {
                return;
            }
            HeroInjuredEventData heroInjuredEventData = data as HeroInjuredEventData;
            if (heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity)
            {
                float bl = CombatHeroEntity.CurrCombatHeroInfo.hp.Value * 1.0f /
                           CombatHeroEntity.MaxCombatHeroInfo.hp.Value;
                if (bl * 100 < effectValue[0])
                {
                    addHp = CombatCalculateTool.Instance.GetVlaueRatioForLong(
                        CombatHeroEntity.MaxCombatHeroInfo.hp.Value, 10);
                    BuffInfo buffInfo = BuffInfo.GetBuffInfo(10151, -1, 1);
                    BuffBasic = CombatHeroEntity.BuffControl.AddBuff(CombatHeroEntity, buffInfo);
                    isActiveFuHuo = true;
                    count++;
                }
            }
        }
        protected override void ProUseSkill()
        {
        }
        protected override void ProCombatUpdate(float time)
        {
            if (!isActiveFuHuo)
            {
                return;
            }
            _currTime += time;
            if (_currTime > 0.2f)
            {
                Recover(CombatHeroEntity, CombatHeroEntity.GetMainHotPoin(), addHp, AttType.Skill);
                if (CombatHeroEntity.CurrCombatHeroInfo.hp.Value >= CombatHeroEntity.MaxCombatHeroInfo.hp.Value)
                {
                    isActiveFuHuo = false;
                    float v = effectValue[1];
                    CombatHeroEntity.CurrCombatHeroInfo.Metal += v;
                    CombatHeroEntity.CurrCombatHeroInfo.Wood += v;
                    CombatHeroEntity.CurrCombatHeroInfo.Water += v;
                    CombatHeroEntity.CurrCombatHeroInfo.Fire += v;
                    CombatHeroEntity.CurrCombatHeroInfo.Earth += v;
                    S9014 s9014 = CombatHeroEntity.CombatHeroSkillControl.GetSkillBasic();
                    if (s9014 != null)
                    {
                        s9014.isActive = true;
                    }
                    //完成
                }
            }
        }
        protected void ProDefaultTimeLineTrigger_BaoZa(string groupName, CombatHeroHitPoint targetEntity,
            ITimelineFxLogic timelineFxLogic,
            TriggerData triggerData, ISkillFeatures skillFeatures)
        {
            float harmBl = effectValue[0];
            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);
        }
    }
}