//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Tuesday, July 24, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
    public class ChatFloatWin : UIBase
    {
        [SerializeField] RectTransform m_ContainerFloat;
        [SerializeField] RichText m_Chat;
        DateTime overdueTime;
        ChatCenter chatCenter
        {
            get
            {
                return ChatCenter.Instance;
            }
        }
        protected override void OnPreOpen()
        {
            base.OnPreOpen();
            m_ContainerFloat.SetActive(false);
            ChatManager.Instance.chatFloatUpdate += ChatFloatUpdate;
            UIManager.Instance.OnOpenWindow += OnOpenWindow;
        }
        protected override void OnOpen()
        {
            base.OnOpen();
        }
        protected override void OnPreClose()
        {
            ChatManager.Instance.chatFloatUpdate -= ChatFloatUpdate;
            UIManager.Instance.OnOpenWindow -= OnOpenWindow;
        }
        protected override void OnClose()
        {
            base.OnClose();
        }
        protected void LateUpdate()
        {
            if (DateTime.Now > overdueTime && m_ContainerFloat.gameObject.activeSelf)
            {
                m_ContainerFloat.SetActive(false);
            }
        }
        void OnOpenWindow(UIBase window)
        {
            if (window is MainWin || window is LoadingWin/* || window is TreasureBaseWin*/)
            {
                m_ContainerFloat.SetActive(false);
            }
        }
        private void ChatFloatUpdate(ChatData data)
        {
            if (!chatCenter.IsShowChatFloat())
            {
                return;
            }
            if (data == null)
            {
                return;
            }
            if (string.IsNullOrEmpty(data.content))
            {
                return;
            }
            switch (data.type)
            {
                case ChatInfoType.Friend:
                case ChatInfoType.FairyQuestion:
                case ChatInfoType.FairyTip:
                case ChatInfoType.TeamTip:
                case ChatInfoType.default2:
                    return;
            }
            m_ContainerFloat.SetActive(true);
            m_Chat.text = string.Empty;
            overdueTime = DateTime.Now.AddTicks(3 * TimeSpan.TicksPerSecond);
            if (data.infoList != null)
            {
                m_Chat.SetExtenalData(data.infoList);
            }
            Co_SetText(StringUtility.Contact(SetChatExtraInfo(data), data.content));
        }
        void Co_SetText(string value)
        {
            m_Chat.text = value;
            if (m_Chat.preferredWidth >= 1000)
            {
                m_Chat.alignment = TextAnchor.MiddleLeft;
            }
            else
            {
                m_Chat.alignment = TextAnchor.MiddleCenter;
            }
        }
        string SetChatExtraInfo(ChatData data)
        {
            switch (data.type)
            {
                case ChatInfoType.World:
                    {
                        return string.Format("![]() {1}: ", "ChatIcon_World", (data as ChatUeseData).name);
                    }
                case ChatInfoType.Area:
                    return string.Format("
 {1}: ", "ChatIcon_World", (data as ChatUeseData).name);
                    }
                case ChatInfoType.Area:
                    return string.Format("![]() {1}: ", "ChatIcon_Area", (data as ChatUeseData).name);
                case ChatInfoType.CrossServer:
                    return string.Format("
 {1}: ", "ChatIcon_Area", (data as ChatUeseData).name);
                case ChatInfoType.CrossServer:
                    return string.Format("![]() {1}: ", "ChatIcon_CrossServer", (data as ChatUeseData).name);
                case ChatInfoType.Team:
                    {
                        string playerName = (data as ChatUeseData).name;
                        return string.Format("
 {1}: ", "ChatIcon_CrossServer", (data as ChatUeseData).name);
                case ChatInfoType.Team:
                    {
                        string playerName = (data as ChatUeseData).name;
                        return string.Format("![]() {1}", "ChatIcon_Team", playerName + (playerName != string.Empty ? ": " : string.Empty));
                    }
                case ChatInfoType.Friend:
                    break;
                case ChatInfoType.Fairy:
                    {
                        string playerName = (data as ChatUeseData).name;
                        return string.Format("
 {1}", "ChatIcon_Team", playerName + (playerName != string.Empty ? ": " : string.Empty));
                    }
                case ChatInfoType.Friend:
                    break;
                case ChatInfoType.Fairy:
                    {
                        string playerName = (data as ChatUeseData).name;
                        return string.Format("![]() {1}", "ChatIcon_Fairy", playerName + (playerName != string.Empty ? ": " : string.Empty));
                    }
                // case ChatInfoType.Trumpet:
                //     return string.Format("
 {1}", "ChatIcon_Fairy", playerName + (playerName != string.Empty ? ": " : string.Empty));
                    }
                // case ChatInfoType.Trumpet:
                //     return string.Format("![]() {1}: ", "ChatIcon_Trumpet", (data as ChatTrumpetData).name);
                case ChatInfoType.Invite:
                    return string.Format("
 {1}: ", "ChatIcon_Trumpet", (data as ChatTrumpetData).name);
                case ChatInfoType.Invite:
                    return string.Format("![]() ", "ChatIcon_Invite");
                case ChatInfoType.System:
                    return string.Format("
 ", "ChatIcon_Invite");
                case ChatInfoType.System:
                    return string.Format("![]() ", "ChatIcon_System");
                case ChatInfoType.default1:
                    return string.Format("
 ", "ChatIcon_System");
                case ChatInfoType.default1:
                    return string.Format("![]() {1}: ", "ChatIcon_default1", (data as ChatUeseData).name);
            }
            return string.Empty;
        }
    }
 {1}: ", "ChatIcon_default1", (data as ChatUeseData).name);
            }
            return string.Empty;
        }
    }