using System;
using System.Collections.Generic;
using GCGame.Table;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.Events;
using Module.Log;

public class MagicMain : MonoBehaviour
{
    #region static

    // 功能已开启 - true
    // 功能未开启 - false
    public static bool ShowMagicPageStr(int pageIndex, UInt64 id = Games.GlobeDefine.GlobeVar.INVALID_GUID)
    {
        Tab_FunctionOpen tab = TableManager.GetFunctionOpenByID(7);
        if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < tab.OpenLevel)
        {
            GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5407}", tab.OpenLevel));
            return false;
        }
        else
        {
            Hashtable info = new Hashtable();
            info["pageIndex"] = pageIndex;
            info["guid"] = id;
            UIManager.ShowUI(UIInfo.MagicWndPath, (sucess, param) =>
            {
                if (sucess == true)
                {
                    Hashtable p = param as Hashtable;
                    if (p != null)
                    {
                        MagicMain.Instance.needSelectId = (UInt64)p["guid"];
                        MagicMain.Instance._TagPanel.ShowPage((int)p["pageIndex"]);
                    }
                }
                else
                {
                    LogModule.ErrorLog("Can't show MagicWndPath");
                }
                
            }, info);

            return true;
        }
    }

    #endregion

    public GameObject redPoint;                     // 红点提示
    public static MagicMain Instance;
    public MagicInfoWnd InfoWnd;                    // 佩戴界面
    public MagicClearWnd ClearWnd;                  // 锻造界面
    public MagicCombinWnd CombinWnd;                // 合成界面

    public UITagPanel _TagPanel;
    public UInt64 needSelectId = Games.GlobeDefine.GlobeVar.INVALID_GUID;

    void Awake()
    {
        Instance = this;
        Hashtable calbackMoveparam1 = new Hashtable();
        calbackMoveparam1["name"] = "MagicItemUpdate";
        MessageEventCallBack fun1 = ItemUpdate;
        calbackMoveparam1.Add("callFun", fun1);
        Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.MagicItemUpdate, calbackMoveparam1);

        Hashtable calbackMoveparam2 = new Hashtable();
        calbackMoveparam2["name"] = "UpdateShowModel";
        MessageEventCallBack fun2 = UpdateShowModel;
        calbackMoveparam2.Add("callFun", fun2);
        Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.MagicShowModel, calbackMoveparam2);
    }

    void OnDestroy()
    {
        Instance = null;
        Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.MagicItemUpdate, "MagicItemUpdate");
        Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.MagicShowModel, "UpdateShowModel");
    }

    public void UpdateShowModel(Hashtable addParam, Hashtable sendParam)
    {
        InfoWnd.UpdateDressTip();
    }

    public void ItemUpdate(Hashtable addParam, Hashtable sendParam)
    {
        InfoWnd.Start();
        CombinWnd.InitStart();
        ClearWnd.InitStart();
    }

    public void OnEnable()
    {
        _TagPanel.ShowPage(0);
        UIManager.ShowUI(UIInfo.MoneyInfoPanel);
    }

    public void OnDisable()
    {
        _TagPanel.Reset();
        UIManager.CloseUI(UIInfo.MoneyInfoPanel);
    }

    //public void OpenChildWnd(int page, UInt64 id)
    //{
    //    if (IsFuncOpen())
    //    {
    //        needSelectId = id;
    //        _TagPanel.ShowPage(page);
    //    }
    //}

    public void SetUseItem(int dataID)
    {
        ClearWnd.SetPayItem(dataID);
    }

    public void TagShowPage(int page)
    {
        if (page == 0)
        {
            InfoWnd.Start();
        }
        if (page == 1)
        {
            ClearWnd.InitStart();
            needSelectId = Games.GlobeDefine.GlobeVar.INVALID_GUID;
        }
        if (page == 2)
        {
            CombinWnd.InitStart();
            needSelectId = Games.GlobeDefine.GlobeVar.INVALID_GUID;
        }
    }

    public void OnClick_Close()
    {
        UIManager.CloseUI(UIInfo.MagicWndPath);
    }

    public void SetRedPoint(bool isShow)
    {
        if(redPoint != null)
        {
            if(redPoint.activeSelf != isShow)
            {
                redPoint.SetActive(isShow);
                RedTipPoint.RedPointStateChange(RedTipPoint.PointType.Magic, isShow);
            }
        }
    }
    

    public static void UpdateRedPoint(Hashtable addParam = null, Hashtable sendParam = null)
    {
        // 当页面法宝页面存时,页面也会逐层更新红单,就省去此处检测
        if (MagicMain.Instance != null && MagicMain.Instance.gameObject.activeInHierarchy)
            return;

        if (MagicInfoWnd.HasRedPoint())
        {
            RedTipPoint.RedPointStateChange(RedTipPoint.PointType.Magic,true);
        }
        else
        {
            RedTipPoint.RedPointStateChange(RedTipPoint.PointType.Magic, false);
        }
    }
}