using Common.Utility.CombatEvent;
using Fort23.Core;
using GameLogic.Combat.CombatTool;
using GameLogic.Player;
using Utility;
namespace GameLogic.Combat.Skill
{
    /// 
    /// 玄黄道 :每次使用功法时在当前位置留下一道属性印记,下一个放上来的功法如果和以前功法相生则功法效果提升50%,每次使用功法时都会治疗对应相生属性的伤势。(均衡性功法搭配,转盘改变,变为金、水、木、火、土)
    /// 
    public class DS60103 : SkillBasic
    {
        protected Map WuXingTypeMap = new Map();
        protected override void ProUseSkill()
        {
        }
        protected override void ProInitSkill()
        {
            CombatEventManager.Instance.AddEventListener(CombatEventType.AddUseGongFa, AddUseGongFa);
            CombatEventManager.Instance.AddEventListener(CombatEventType.SkillSlotsAlter, SkillSlotsAlter);
        }
        private void AddUseGongFa(IEventData iEventData)
        {
            AddUseGongFaEventData addUseGongFaEventData = iEventData as AddUseGongFaEventData;
            if (addUseGongFaEventData.SkillBasic.CombatHeroEntity == CombatHeroEntity &&
                addUseGongFaEventData.SkillBasic.SelfSkillConfig.SkillType == 1)
            {
                WuXingTypeMap.Add(addUseGongFaEventData.SkillSlots.index, addUseGongFaEventData.SkillBasic.wuXingType);
                float v = SelfSkillConfig.effectValue[1];
                switch (addUseGongFaEventData.SkillBasic.wuXingType)
                {
                    case WuXingType.Gold:
                        CombatHeroEntity.CurrCombatHeroInfo.Metal_Injury -= v;
                        break;
                    case WuXingType.Wood:
                        CombatHeroEntity.CurrCombatHeroInfo.Wood_Injury -= v;
                        break;
                    case WuXingType.Water:
                        CombatHeroEntity.CurrCombatHeroInfo.Water_Injury -= v;
                        break;
                    case WuXingType.Fire:
                        CombatHeroEntity.CurrCombatHeroInfo.Fire_Injury -= v;
                        break;
                    case WuXingType.Earth:
                        CombatHeroEntity.CurrCombatHeroInfo.Earth_Injury -= v;
                        break;
                }
                HuangDaoAlterSlotsEventData huangDaoAlterSlotsEventData = HuangDaoAlterSlotsEventData.Create();
                huangDaoAlterSlotsEventData.WuXingType = addUseGongFaEventData.SkillBasic.wuXingType;
                huangDaoAlterSlotsEventData.CombatHeroEntity = CombatHeroEntity;
                huangDaoAlterSlotsEventData.index = addUseGongFaEventData.SkillSlots.index;
                CombatEventManager.Instance.Dispatch(CombatEventType.HuangDaoAlterSlots, huangDaoAlterSlotsEventData);
            }
        }
        private void SkillSlotsAlter(IEventData iEventData)
        {
            SkillSlotsAlterEventData skillSlotsAlterEventData = iEventData as SkillSlotsAlterEventData;
            if (skillSlotsAlterEventData.SkillBasic != null &&
                skillSlotsAlterEventData.SkillBasic.CombatHeroEntity == CombatHeroEntity &&
                skillSlotsAlterEventData.SkillBasic.SelfSkillConfig.SkillType == 1)
            {
                if (WuXingTypeMap.TryGetValue(skillSlotsAlterEventData.SkillSlots.index, out WuXingType wuXingType))
                {
                    WuXingTypeMap.Remove(skillSlotsAlterEventData.SkillSlots.index);
                    bool isSymbiosis = CombatCalculateTool.Instance.IsSymbiosis(
                        skillSlotsAlterEventData.SkillBasic.wuXingType,
                        wuXingType);
                    if (isSymbiosis)
                    {
                        skillSlotsAlterEventData.SkillBasic.IntensifyingEffect(SelfSkillConfig.effectValue[0]);
                    }
                }
            }
        }
        private void Finish()
        {
        }
        protected override void ProCombatUpdate(float time)
        {
        }
        protected override void ProDispose()
        {
            WuXingTypeMap.Clear();
            CombatEventManager.Instance.RemoveEventListener(CombatEventType.AddUseGongFa, AddUseGongFa);
            CombatEventManager.Instance.RemoveEventListener(CombatEventType.SkillSlotsAlter, SkillSlotsAlter);
        }
    }
}