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 UnityEngine;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
namespace GameLogic.Combat.Skill
{
    /// 
    /// 缠绕
    /// 敌人脚下生长出藤蔓,将敌人捆住。{0}秒内不能行动(功法不在释放和填充),受到木灵之子的攻击伤害+{1}%
    /// 
    public class S9064 : SkillBasic
    {
        private float _currTime;
        private bool _isUpdate;
        private TimeLineEventLogicGroupBasic _chanRaoLoop;
        private CombatHeroEntity chanRaoTarget;
        private BuffBasic _buffBasic;
        protected override void ProUseSkill()
        {
            ActivationTimeLineData("9064");
            CombatHeroHitPoint combatHeroHitPoint = CombatHeroEntity.CombatAIBasic.currFocusTarget
                .GetThis()
                .GetMainHotPoin();
            BetterList currTarget = new BetterList();
            currTarget.Add(combatHeroHitPoint);
            chanRaoTarget = combatHeroHitPoint.combatHeroEntity as CombatHeroEntity;
            _chanRaoLoop = ActivationTimeLineData("9064_chanrao", currTarget: currTarget);
        }
        protected override void ProActiveSkill()
        {
            CombatEventManager.Instance.AddEventListener(CombatEventType.StartInjured, StartInjured);
        }
        private void StartInjured(IEventData data)
        {
            if (!_isUpdate)
            {
                return;
            }
            StartInjuredEventData startInjuredEventData = data as StartInjuredEventData;
            if (startInjuredEventData.HarmReturnInfo.target.combatHeroEntity != chanRaoTarget)
            {
                return;
            }
            SummonCombatHeroEntity summonCombatHeroEntity =
                startInjuredEventData.HarmReturnInfo.source as SummonCombatHeroEntity;
            if (summonCombatHeroEntity != null && summonCombatHeroEntity.ownerEntity == CombatHeroEntity)
            {
                long att = startInjuredEventData.HarmReturnInfo.att;
                long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(att, effectValue[1]);
                startInjuredEventData.HarmReturnInfo.att += v;
            }
            //如果是木桩 伤害增加
        }
        protected override void ProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
            ITimelineFxLogic timelineFxLogic,
            TriggerData triggerData, ISkillFeatures skillFeatures)
        {
            _currTime = 0;
            _isUpdate = true;
            BuffInfo buffInfo = BuffInfo.GetBuffInfo(10251, -1, 1);
            _buffBasic = chanRaoTarget.BuffControl.AddBuff(CombatHeroEntity, buffInfo);
        }
        private void Finish()
        {
            _isUpdate = false;
            chanRaoTarget = null;
            if (_buffBasic != null)
            {
                _buffBasic.DelectBuff();
            }
            _buffBasic = null;
            if (_chanRaoLoop != null)
            {
                _chanRaoLoop.CloseLoopFx();
            }
            _chanRaoLoop = null;
        }
        protected override void ProDispose()
        {
            Finish();
        }
        protected override void ProCombatUpdate(float time)
        {
            if (!_isUpdate)
            {
                return;
            }
            _currTime += time;
            if (_currTime > effectValue[0])
            {
                Finish();
            }
        }
    }
}