using CommonAI.ZoneClient;
using XmdsCommon.Message;

namespace XmdsCommon.ZoneClient.XmdsClientVirtual
{
    public class XmdsClientVirtual_Monster : XmdsClientVirtual
    {
        private MonsterVisibleDataB2C mData = null;

        public override void OnInit(ZoneUnit owner)
        {
            base.OnInit(owner);
            if (owner == null || owner.SyncInfo == null || !(owner.SyncInfo.VisibleInfo is MonsterVisibleDataB2C))
            {
                mLog.Error("ClientVirtual_Monster Init Error");
            }
            else
            {
                mData = owner.SyncInfo.VisibleInfo as MonsterVisibleDataB2C;
            }
        }

        public override void OnDispose(ZoneUnit owner)
        {
            base.OnDispose(owner);
        }

        protected override void MOwner_OnDoEvent(ZoneObject obj, CommonAI.Zone.ObjectEvent e)
        {
            if (e is MonsterHeirInfoChangeEventB2C)
            {
                if (mData != null)
                {
                    mData.UnitHeirInfo = (e as MonsterHeirInfoChangeEventB2C).UnitHeirInfo;
                }
            }

            base.MOwner_OnDoEvent(obj, e);
        }

        #region 常用方法.

        public string GetName()
        {
            if (mData != null)
            {
                return mData.DisplayName;
            }
            return null;
        }

        public int GetLv()
        {
            if (mOwner != null && mOwner.SyncInfo != null)
            {
                return mOwner.SyncInfo.Level;
            }

            return 0;
        }

        /// <summary>
        /// 获得怪物品质.
        /// </summary>
        /// <returns></returns>
        public MonsterVisibleDataB2C.MonsterQcolor GetMonsterQcolor()
        {
            if (mData != null)
            {
                return mData.Qcolor;
            }

            return MonsterVisibleDataB2C.MonsterQcolor.Q0;
        }

        /// <summary>
        /// 获得怪物类型小怪、精英、BOSS.
        /// </summary>
        /// <returns></returns>
        public MonsterVisibleDataB2C.MonsterType GetMonsterType()
        {
            if (mData != null)
            {
                return mData.MType;
            }

            return MonsterVisibleDataB2C.MonsterType.MType0;
        }

        /// <summary>
        /// 获得攻击类型(主动\被动).
        /// </summary>
        /// <returns></returns>
        public MonsterVisibleDataB2C.MonsterAttackType GetMonsterAtkType()
        {
            if (mData != null)
            {
                return mData.AttackType;
            }

            return MonsterVisibleDataB2C.MonsterAttackType.Active;
        }

        /// <summary>
        /// 获得种族类型.
        /// </summary>
        /// <returns></returns>
        public MonsterVisibleDataB2C.MonsterAtype GetMonsterRaceType()
        {
            if (mData != null)
            {
                return mData.Atype;
            }

            return MonsterVisibleDataB2C.MonsterAtype.Monster;

        }

        public int GetID()
        {
            if (mData != null)
            {
                return mData.MonsterID;
            }

            return 0;
        }

        public string GetSceneType()
        {
            if (mData != null)
            {
                return mData.SenceType;
            }

            return null;
        }

        public string GetTitle()
        {
            if (mData != null)
            {
                return mData.Title;
            }

            return null;
        }

        public MonsterVisibleDataB2C.HeirInfo GetHeirInfo()
        {
            if (mData != null)
            {
                return mData.UnitHeirInfo;
            }
            return null;
        }

        public byte GetHpPlies()
        {
            if(mData != null)
            {
                return mData.hpPlies;
            }
            return 1;
        }

        public MonsterVisibleDataB2C GetData()
        {
            return mData;
        }
        #endregion
    }
}