using System.Collections.Generic;
using Common.Utility.CombatEvent;
using Fort23.Core;
using GameLogic.Combat.Buff;
using GameLogic.Combat.CombatTool;
using GameLogic.Combat.Hero;
namespace GameLogic.Combat.Skill
{
    /// 
    /// 青莲净体诀  前方槽位功法在命中目标时会获得青莲之气,青莲气体达到{0}层时清除自己{1}个随机debuff,并恢复{2}%最大生命
    /// 后方槽位也能获得青莲之气
    ///如果为相生功法,各自获得的青莲之气数*2
    /// 
    public class S2009 : SkillBasic
    {
        private int currCount;
        private bool isSymbiosis;
        protected override void ProUseSkill()
        {
        }
        protected override void ProInitSkill()
        {
            currCount = 0;
            isSymbiosis = false;
            CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
        }
        protected override void ProActiveSkill()
        {
            if (SelfSkillConfig.PromoteLanPara_1.Length > 1)
            {
                CombatHeroSkillControl combatHeroSkillControl =
                    CombatHeroEntity.CombatHeroSkillControl.This();
                SkillBasic skillBasic = combatHeroSkillControl.GetSkillQueueForIndex(index + 1);
                SkillBasic skillBasic2 = combatHeroSkillControl.GetSkillQueueForIndex(index - 1);
                if (skillBasic != null && skillBasic2 != null)
                {
                    isSymbiosis =
                        CombatCalculateTool.Instance.IsSymbiosis(skillBasic.wuXingType, skillBasic2.wuXingType);
                }
            }
        }
        private void HeroInjured(IEventData eventData)
        {
            HeroInjuredEventData heroInjuredEventData = eventData as HeroInjuredEventData;
            HarmReturnInfo harmReturnInfo = heroInjuredEventData.HarmReturnInfo;
            if (harmReturnInfo.source != CombatHeroEntity)
            {
                return;
            }
            SkillBasic skillBasic = harmReturnInfo.triggerData.Source as SkillBasic;
            if (IsPassiveActivateSkill(skillBasic))
            {
                object iBarrier = heroInjuredEventData.HarmReturnInfo.triggerData.IBarrier;
                if (iBarrier != null)
                {
                    return;
                }
                if (isSymbiosis)
                {
                    currCount += 2;
                }
                else
                {
                    currCount++;
                }
                if (currCount >= effectValue[0]) //满足层数
                {
                    currCount = 0;
                    List buffBasics = CombatHeroEntity.BuffControl.GetBuffBasicForBuffType(2);
                    float odds = effectValue[1];
                    float currOdds = CombatCalculateTool.Instance.GetOdd(0, 100);
                    if (buffBasics.Count > 0 && currOdds <= odds)
                    {
                        int index = CombatCalculateTool.Instance.GetOdd(0, buffBasics.Count);
                        BuffBasic buffBasic = buffBasics[index];
                        CombatHeroEntity.BuffControl.RemoveBuff(buffBasic);
                        buffBasics.RemoveAt(index);
                    }
                    long maxHp = CombatHeroEntity.CurrCombatHeroInfo.attack.Value;
                    long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(maxHp, effectValue[2]);
                    Recover(CombatHeroEntity, CombatHeroEntity.GetMainHotPoin(true), v,
                        AttType.Skill);
                }
            }
        }
    }
}