using CommonAI.Data;
using CommonAI.Zone;
using CommonAI.Zone.Helper;
using CommonAI.Zone.Instance;
using CommonLang;
using System.Collections.Generic;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
using XmdsCommonServer.XLS.Data;

namespace XmdsCommonSkill.Plugin.Skills.Remedy
{
	/// <summary>
	/// 战士【1】技能 1 - 2(扇子接触到友军会恢复友军自身失去血量的n%)
	/// </summary>
	public class Remedy_510120 : Remedy_510110
	{
        private static readonly int ID = 510120;

        //友军被治疗
        protected XmdsSkillValue valueSet3;

		//友军治疗列表
		protected HashSet<uint> mCureList = new HashSet<uint>();

        public override int SkillID { get { return ID; } }

		protected override int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState state)
		{
			base.OnLaunchSkillOver(info, launcher, state);

			mCureList.Clear();
			return 0;
		}

		protected override void OnSkillLogicEvent(BattleParams param)
		{
            if (param.Attacker.IsAllies(param.Hitter, false, true))
			{
				if (mCureList.Contains(param.Hitter.mUnit.ID))
				{
					param.UseDamageType = DamageType.None;
				}
				else
				{
					mCureList.Add(param.Hitter.mUnit.ID);
					//友方获得加速buff 和 加血
					param.Hitter.mUnit.AddBuff(Buff_ID_SpeedUp, param.Attacker.mUnit);

					double addHP = (long)param.Attacker.MirrorProp.MaxAttack * XmdsUnitProp.PER * valueSet3.GetValue(param.GameSkill.TalentSkillLevel2);
					param.Hitter.mUnit.AddHP((int)addHP, param.Attacker.mUnit);
				}				
			}
		}

		protected override void OnInitConfig()
        {
            XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
			base.InitBaseConfig(data);
			InitData(data, out valueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet);
            InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
            InitData(data, out valueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3);

			//扩展配置
			InitData(data, out valueSet5, XmdsSkillData.XmdsSkillDataKey.ValueSet5);
			InitData(data, out valueSet6, XmdsSkillData.XmdsSkillDataKey.ValueSet6);
		}
    }
}