using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using GCGame.Table;
using System;
using UnityEngine.UI;

public class FriendAndMailRoot : MonoBehaviour
{

    private static FriendAndMailRoot m_Instance = null;
    public static FriendAndMailRoot Instance()
    {

        return m_Instance;
    }

    void OnEnable()
    {
        m_Instance = this;

        UpdateRedCheck();
        UpdateMailRedTip();

        _TagPanel.ShowPage(0);
    }

    void OnDisable()
    {
        m_Instance = null;
    }

    public void CloseWindow()
    {
        UIManager.CloseUI(UIInfo.FriendAndMail);
    }


    #region static function

    public static void ShowFriendChat(UInt64 guid, string name, string icon = "", int level = 0)
    {
        Hashtable hash = new Hashtable();
        hash.Add("FuncName", "FriendSendMessage");
        hash.Add("GUID", guid);
        hash.Add("Name", name);
        hash.Add("Icon", icon);
        hash.Add("Level", level);

        ShowFriendAndMailRoot(hash);
    }

    public static void ShowFriendAndMailRoot(Hashtable funParams)
    {
        UIManager.ShowUI(UIInfo.FriendAndMail, FriendAndMailRoot.ShowUIOver, funParams);
    }

    static void ShowUIOver(bool bSuccess, object param)
    {
        if (bSuccess)
        {
            Hashtable initParams = param as Hashtable;
            if (FriendAndMailRoot.Instance() != null && initParams != null && initParams.Count > 1)
            {
                FriendAndMailRoot.Instance().ShowFriendAndMail(initParams);
            }
        }
    }

    void ShowFriendAndMail(Hashtable hashParams)
    {
        string funName = (string)hashParams["FuncName"];

        switch (funName)
        {
            case "FriendSendMessage":
                FriendSendMessage(hashParams);
                break;
        }
        
    }

    #endregion

    #region open friend

    public UITagPanel _TagPanel;
    public FriendRootLogic _FriendRootLogic;
    public GameObject _FriendRedCheckTips;
    public Text _FriendAllUnCheckedCountText;

    void FriendSendMessage(Hashtable hashParams)
    {
        _TagPanel.ShowPage(0);
        var friendGuid = (UInt64)hashParams["GUID"];
        var friendName = (string)hashParams["Name"];
        string icon = "";
        int level = 0;
        if (hashParams.ContainsKey("Icon"))
        {
            icon = (string)hashParams["Icon"];
        }
        if (hashParams.ContainsKey("level"))
        {
            level = (int)hashParams["Level"];
        }
        
        _FriendRootLogic.ShowUIChat(friendGuid, friendName, icon, level);
    }

    public void OnReceiveChat()
    {
        _FriendRootLogic.OnReceiveChat();

        UpdateRedCheck();
    }

    public void UpdateRedCheck()
    {
        if (GameManager.gameManager.PlayerDataPool.ChatHistory.IsHaveUnCheckChat())
        {
            _FriendRedCheckTips.SetActive(true);
        }else if (GameManager.gameManager.PlayerDataPool.NewApplyCheck
            && GameManager.gameManager.PlayerDataPool.GetNewApplyListCount() > 0)
        {
            _FriendRedCheckTips.SetActive(true);
        }else
        { 
            _FriendRedCheckTips.SetActive(false);
            return;
        }

        var count = GameManager.gameManager.PlayerDataPool.ChatHistory.GetAllUnCheckedChatCount() + GameManager.gameManager.PlayerDataPool.GetNewApplyListCount();
        _FriendAllUnCheckedCountText.text = (count >= 99 ? 99 : count).ToString();

    }

    #endregion

    #region mail

    public GameObject _MailRedCheckTips;
    public Text _UnCheckedMailCountText;
    public GameObject _MailFullMark;
    public void UpdateMailRedTip()
    {
        _MailFullMark.SetActive(MailData.GetAllMailCount() >= 100);
        if (MailData.IsHaveUpReadMail())
        {
            _MailRedCheckTips.SetActive(true);
            var count = MailData.GetAllUnLoadMainCount();
            _UnCheckedMailCountText.text = (count >= 99 ? 99 : count).ToString();

            return;
        }

        _MailRedCheckTips.SetActive(false);
    }

    #endregion

}