using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
using Core.Utility;
using GameLogic.Combat.Buff;
using GameLogic.Combat.CombatTool;
using GameLogic.Combat.Hero;
using GameLogic.Player;
using UnityEngine;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
namespace GameLogic.Combat.Skill
{
    /// 
    /// 伤害很高)(前摇时间长):很多剑从远处汇聚到boss周围,然后以一字行快速贯穿目标,每命中{0}次防御削减{1}%,{2}次所有伤势+{3}  
    /// ,如果目标上有剑毅,每丙剑消耗{4}层剑毅让敌人受到{5}额外的伤害
    /// 
    public class S9001 : SkillBasic
    {
        private bool isTrgger;
        private float currTime;
        private int count;
        private int hitCount;
        private int shangShiCount;
        protected override void ProInitSkill()
        {
            ballisticsCount = (int)10;
            AddTriggerCallBack("sk1_fashe", Sk1_FaSheProDefaultTimeLineTrigger);
        }
        protected override void ProUseSkill()
        {
            ActivationTimeLineData("sk1");
            hitCount = 0;
        }
        protected override void ProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
            ITimelineFxLogic timelineFxLogic,
            TriggerData triggerData, ISkillFeatures skillFeatures)
        {
            count = 0;
            hitCount = 0;
            shangShiCount = 0;
            currTime = 1;
            isTrgger = true;
        }
        private void Sk1_FaSheProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
            ITimelineFxLogic timelineFxLogic,
            TriggerData triggerData, ISkillFeatures skillFeatures)
        {
            float hv = effectValue[0];
            b_1007 b1007 = targetEntity.combatHeroEntity.BuffControl.GetBuffBasicForType();
            if (b1007 != null)
            {
                b1007.ReduceCount((int)effectValue[5]);
                hv += effectValue[6];
            }
            long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(CombatHeroEntity.CurrCombatHeroInfo.attack.Value,
                hv);
            HarmReturnInfo harmReturnInfo = CombatCalculateTool.Instance.Harm(CombatHeroEntity, targetEntity, v,
                AttType.Skill, triggerData, wuXingType, skillFeatures,
                HarmType.Default);
            if (harmReturnInfo.triggerData.IBarrier == null)
            {
                hitCount++;
                shangShiCount++;
                if (hitCount >= effectValue[1])
                {
                    hitCount = 0;
                    long def = targetEntity.combatHeroEntity.MaxCombatHeroInfo.defense.Value;
                    long jdef = CombatCalculateTool.Instance.GetVlaueRatioForLong(def, effectValue[2]);
                    targetEntity.combatHeroEntity.CurrCombatHeroInfo.defense -= jdef;
                    if (targetEntity.combatHeroEntity.CurrCombatHeroInfo.defense < 0)
                    {
                        targetEntity.combatHeroEntity.CurrCombatHeroInfo.defense = (EncryptionLong)0;
                    }
                }
                if (shangShiCount >= effectValue[3])
                {
                    shangShiCount = 0;
                    int vInjury = (int)effectValue[4];
                    ShangSHi(WuXingType.Gold, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
                    ShangSHi(WuXingType.Wood, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
                    ShangSHi(WuXingType.Water, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
                    ShangSHi(WuXingType.Fire, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
                    ShangSHi(WuXingType.Earth, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
                }
            }
        }
        public void ShangSHi(WuXingType wuXingType, CombatHeroEntity source, ShowBaiscEntity target, int vInjury)
        {
            BuffInfo buffInfo = null;
            switch (wuXingType)
            {
                case WuXingType.Gold:
                    buffInfo = BuffInfo.GetBuffInfo(10291, vInjury, this);
                    break;
                case WuXingType.Fire:
                    buffInfo = BuffInfo.GetBuffInfo(10321, vInjury, this);
                    break;
                case WuXingType.Wood:
                    buffInfo = BuffInfo.GetBuffInfo(10301, vInjury, this);
                    break;
                case WuXingType.Earth:
                    buffInfo = BuffInfo.GetBuffInfo(10331, vInjury, this);
                    break;
                case WuXingType.Water:
                    buffInfo = BuffInfo.GetBuffInfo(10311, vInjury, this);
                    break;
            }
            target.BuffControl.AddBuff(source, buffInfo);
        }
        protected override void ProCombatUpdate(float time)
        {
            if (!isTrgger)
            {
                return;
            }
            currTime += time;
            if (currTime > 0.15f)
            {
                count++;
                currTime -= 0.15f;
                SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos1");
                Vector3 pos = specialDotInfo.GetWorlPos();
                Quaternion quaternion = CombatHeroEntity.GameObject.transform.rotation *
                                        Quaternion.Euler(new Vector3(0, 0, 360f / 10 * count))
                    ;
                Vector3 dir = quaternion * Vector3.up * 3;
                ActivationTimeLineData("sk1_fashe", customizePos: new Vector3[] { pos + dir });
                if (count > 10)
                {
                    isTrgger = false;
                }
            }
        }
    }
}