using CommonAI.Zone.Instance;
using CommonLang;
using CommonLang.Protocol;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XmdsCommonServer.Message;
using XmdsCommonServer.Plugin.Units;
using XmdsServerNode.Node;

namespace XmdsServerNode.CheatingDeath
{
    public static class CheatingDeathManager
    {
        public static void Init(Properties cfg_prop)
        {
            CheatingDeathConfig.Load(cfg_prop);
        }

        private const string MOVE_SPEED_CHECKER_KEY = "__MoveSpeedChecker";

        /// <summary>
        /// 玩家进入场景时,绑定反作弊
        /// </summary>
        /// <param name="player"></param>
        public static void OnPlayerEnter(InstancePlayer player)
        {
            if (CheatingDeathConfig.ENABLE_MOVE_SPEED_CHECKER)
            {
                var mc = player.GetAttributeAs<MoveSpeedChecker>(MOVE_SPEED_CHECKER_KEY);
                if (mc == null)
                {
                    mc = new MoveSpeedChecker(player);
                    player.SetAttribute(MOVE_SPEED_CHECKER_KEY, mc);
                }
            }
        }
        
        /// <summary>
        /// 发送单位异常到服务器
        /// </summary>
        /// <param name="actor"></param>
        /// <param name="reason"></param>
        public static void SendPlayerException(InstancePlayer actor, string reason)
        {
            var exp = new PlayerExceptionEventB2R();
            exp.playerId = actor.PlayerUUID;
            exp.instanceId = actor.Parent.UUID;
            exp.reason = reason;
            actor.queueEvent(exp);
        }
    }
}