using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using Newtonsoft.Json.Linq;

namespace ET.Server
{
    /// <summary>
    /// 抖音api回调, 评论添加玩家
    /// </summary>
    [HttpHandler(SceneType.RouterManager, "/addPlayer")]
    public class HttpCommentHandler: IHttpHandler
    {
        public async ETTask Handle(Entity domain, HttpListenerContext context)
        {
            Log.Debug($"收到http 评论添加玩家回调...");

            HttpDouyinApiCallbackResponse response = new HttpDouyinApiCallbackResponse();

            string bodyStr = await HttpHelper.GetBodyParameter(context);
            // 判断body是否为空
            if (string.IsNullOrEmpty(bodyStr))
            {
                response.Error = ErrorCode.ERR_ParameterError;
                response.Message = "参数错误";
                HttpHelper.Response(context, response);
                return;
            }

            JObject parameter = JObject.Parse(bodyStr);

            string openId = Convert.ToString(parameter.SelectToken("openId"));
            long roomId = Convert.ToInt64(parameter.SelectToken("roomId"));
            int serverId = Convert.ToInt32(parameter.SelectToken("serverId"));

            Log.Debug($"body参数: openid={openId}, roomId={roomId}, serverId={serverId}");
            // 判断参数
            if (string.IsNullOrEmpty(openId) || roomId <= 0 || serverId <= 0)
            {
                response.Error = ErrorCode.ERR_ParameterError;
                response.Message = "参数错误";
                HttpHelper.Response(context, response);
                return;
            }

            List<StartSceneConfig> list = RealmGateAddressHelper.GetAllGame(1);

            foreach (StartSceneConfig config in list.Where(config => config != null && config.Id == serverId))
            {
                MessageHelper.SendActor(config.InstanceId, new R2G_AddUnitsToMap() { OpenId = openId, RoomId = roomId});
                break;
            }

            HttpHelper.Response(context, response);
            await ETTask.CompletedTask;
        }
    }

    /// <summary>
    /// 抖音api回调, 点赞10次增加等级
    /// </summary>
    [HttpHandler(SceneType.RouterManager, "/like")]
    public class HttpLikeHandler: IHttpHandler
    {
        public async ETTask Handle(Entity domain, HttpListenerContext context)
        {
            Log.Debug($"收到http 点赞10次增加等级回调...");

            HttpDouyinApiCallbackResponse response = new HttpDouyinApiCallbackResponse();

            string bodyStr = await HttpHelper.GetBodyParameter(context);

            if (string.IsNullOrEmpty(bodyStr))
            {
                response.Error = ErrorCode.ERR_ParameterError;
                response.Message = "参数错误";
                HttpHelper.Response(context, response);
                return;
            }

            JObject parameter = JObject.Parse(bodyStr);

            string openId = Convert.ToString(parameter.SelectToken("openId"));
            long roomId = Convert.ToInt64(parameter.SelectToken("roomId"));
            int serverId = Convert.ToInt32(parameter.SelectToken("serverId"));
            // 点赞数
            int likes = Convert.ToInt32(parameter.SelectToken("likes"));
            likes = 30;

            Log.Debug($"body参数: openid={openId}, roomId={roomId}, serverId={serverId}, likes={likes}");
            // 判断参数
            if (string.IsNullOrEmpty(openId) || roomId <= 0 || serverId <= 0 || likes < 0)
            {
                response.Error = ErrorCode.ERR_ParameterError;
                response.Message = "参数错误";
                HttpHelper.Response(context, response);
                return;
            }

            List<StartSceneConfig> list = RealmGateAddressHelper.GetAllGame(1);

            foreach (StartSceneConfig config in list.Where(config => config != null && config.Id == serverId))
            {
                MessageHelper.SendActor(config.InstanceId, new R2G_AddLevel() { OpenId = openId, RoomId = roomId, Likes = likes});
                break;
            }

            HttpHelper.Response(context, response);
            await ETTask.CompletedTask;
        }
    }
}