using CommonAI.Zone.Helper;
using CommonAI.Zone.Instance;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin;
using XmdsServerNode.Node.Interface;

namespace XmdsServerNode.Node
{
    public class ZoneNodeServerFactory : XmdsZoneServerFactory
    {
        private IServerProxy mProxy; 
        public ZoneNodeServerFactory(IServerProxy proxy)
        {
            mProxy = proxy;
        }
        public override CommonAI.Zone.Helper.IQuestAdapter CreateQuestAdapter(CommonAI.Zone.Instance.InstanceZone zone)
        {
            XmdsQuestAdapterServerProfile adapter = new XmdsQuestAdapterServerProfile(zone, mProxy);
            return adapter;
        }
    }

    public class XmdsQuestAdapterServerProfile : IQuestAdapter
    {
        private readonly IServerProxy mProxy;
        private const string EVENT_TYPE = "taskEvent";
        public XmdsQuestAdapterServerProfile(InstanceZone zone, IServerProxy proxy)
            : base(zone)
        {
            mProxy = proxy;
        }

        public override void Dispose()
        {
            base.Dispose();
        }

        private void SendToGameServer(string playerUUID, object msg)
        {
            if (mProxy != null)
            {
                mProxy.SendToGameServer(playerUUID, EVENT_TYPE, msg);
            }
        }


		private void SendMsgToPlayer(string playerUUID, CommonLang.Protocol.IMessage msg)
		{
			if (mProxy != null)
			{
				mProxy.SendMsgToPlayer(playerUUID, msg);
			}
		}

		/// <summary>
		/// 向游戏服接受任务
		/// </summary>
		/// <param name="playerUUID"></param>
		/// <param name="quest"></param>
		/// <param name="args"></param>
		public override void DoAcceptQuest(string playerUUID, string quest, string args)
        {
            var msg = new { eventName = "AcceptQuest", playerId = playerUUID, id = quest, args = args };
            SendToGameServer(playerUUID, msg);
        }

		//向玩家发送消息
		public override void DoSendMsgToPlayer(string playerUUID, CommonLang.Protocol.IMessage msg)
		{
			SendMsgToPlayer(playerUUID, msg);
		}

		/// <summary>
		/// 向游戏服提交任务
		/// </summary>
		/// <param name="playerUUID"></param>
		/// <param name="quest"></param>
		/// <param name="args"></param>
		public override void DoCommitQuest(string playerUUID, string quest, string args)
        {
            var msg = new { eventName = "CommitQuest", playerId = playerUUID, id = quest, args = args };
            SendToGameServer(playerUUID, msg);  
        }
        /// <summary>
        /// 向游戏服放弃任务
        /// </summary>
        /// <param name="playerUUID"></param>
        /// <param name="quest"></param>
        /// <param name="args"></param>
        public override void DoDropQuest(string playerUUID, string quest, string args)
        {
            var msg = new { eventName = "DropQuest", playerId = playerUUID, id = quest, args = args };
            SendToGameServer(playerUUID, msg);  
        }
        /// <summary>
        /// 向游戏服更新任务状态
        /// </summary>
        /// <param name="playerUUID"></param>
        /// <param name="quest"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public override void DoUpdateQuestStatus(string playerUUID, string quest, string key, string value)
        {
            var msg = new { eventName = "UpdateQuestStatus", playerId = playerUUID, id = quest, key = key, value = value };
            SendToGameServer(playerUUID, msg);
            OnQuestStatusChangedHandler(playerUUID, quest, key, value);
        }

    }

}