using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ET.Server
{
    /// <summary>
    /// 战斗服事件工具类
    /// </summary>
    public static class BattleServerEventHelper
    {
        /// <summary>
        /// area related battleServerEvent
        /// </summary>
        /// <param name="msg"></param>
        public static void AreaBattleServerEvent(JObject msg)
        {
            Log.Debug($"AreaBattleServerEvent msg: {JsonConvert.SerializeObject(msg, Formatting.Indented)}");
            long instanceId = Convert.ToInt64(msg.SelectToken("instanceId"));
            Map map = GameMapComponent.Instance.Get(instanceId);
            if (map == null)
            {
                Log.Warning($"areaBattleServerEvent no area: {msg}");
                return;
            }

            switch (Convert.ToString(msg.SelectToken("eventName")))
            {
                case "unitDead":
                {
                    map.GetComponent<MapEventComponent>().OnUnitDead(map, msg);
                    return;
                }
                case "message":
                {
                    // 副本消息
                    map.GetComponent<MapEventComponent>().OnMessageEvent(msg);
                    return;
                }
                case "gameOver":
                {
                    map.GetComponent<MapEventComponent>().OnGameOver(map);
                    return;
                }
                case "pickItem":
                {
                    map.GetComponent<MapEventComponent>().OnPickItem(msg);
                    return;
                }
                case "KillBossEventB2R":
                {
                    map.GetComponent<MapEventComponent>().OnKillBoss(msg);
                    return;
                }
                case "BattleReportEventB2R":
                {
                    // 战斗统计事件
                    map.GetComponent<MapEventComponent>().OnBattleReport(msg);
                    return;
                }
                default:
                {
                    Log.Error($"unknown area event: {msg}");
                    return;
                }
            }
        }

        /// <summary>
        /// player related battleServerEvent
        /// </summary>
        /// <param name="msg"></param>
        public static void PlayerBattleServerEvent(JObject msg)
        {
            Log.Debug($"PlayerBattleServerEvent msg: {JsonConvert.SerializeObject(msg, Formatting.Indented)}");
            switch (Convert.ToString(msg.SelectToken("eventName")))
            {
                case "ConsumeItemEventB2R":
                {
                    return;
                }
                case "interActiveItem":
                {
                    return;
                }
                case "changeSceneProgress":
                {
                    return;
                }
                case "TransUnitEventB2R":
                {
                    return;
                }
                case "SummonMountEventB2R":
                {
                    return;
                }
                case "ShowRebirthDialogueB2R":
                {
                    return;
                }
                case "TriggerSceneEventB2R":
                {
                    return;
                }
                case "PlayerExceptionEventB2R":
                {
                    return;
                }
            }
        }

        /// <summary>
        /// task related battleServerEvent
        /// </summary>
        /// <param name="msg"></param>
        public static void TaskBattleServerEvent(JObject msg)
        {
            Log.Debug($"TaskBattleServerEvent msg: {JsonConvert.SerializeObject(msg, Formatting.Indented)}");
        }

        public static void MapNotifyEvent(JObject msg)
        {
            Log.Debug($"MapNotifyEvent msg: {JsonConvert.SerializeObject(msg, Formatting.Indented)}");
        }
    }
}